原子動力工学特論 課題 3、4 交通電子機械工学専攻 2003310  齋藤 泰治.

Slides:



Advertisements
Similar presentations
大規模な三角 Toeplitz 線形方 程式の高速解法とその応用 ○ 安村 修一(法政大学 4 年) 李 磊(法政大学) 日本応用数理学会「行列・固有値の解法とその応用」研究部会 第6回研究会.
Advertisements

IT 入門 B2 ー 連立一次方程式( 2 ) ー. ガウスの消去法の問題点 – 浮動小数点数の特殊な値 – 数学関数 ピボット選択つきガウスの消去法 演習 授 業 内 容 授 業 内 容.
数値解析シラバス C言語環境と数値解析の概要(1 回) C言語環境と数値解析の概要(1 回) 方程式の根(1回) 方程式の根(1回) 連立一次方程式(2回) 連立一次方程式(2回) 補間と近似(2回) 補間と近似(2回) 数値積分(1回) 数値積分(1回) 中間試験(1回) 中間試験(1回) 常微分方程式(1回)
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
原子動力工学特論 課題2 交通電子機械工学専攻 2003310 齋藤 泰治.
Computational Fluid Dynamics(CFD) 岡永 博夫
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
Fortran と有限差分法の 入門の入門の…
第11回 整列 ~ シェルソート,クイックソート ~
プログラミング論 数値積分
4.3 連立1次方程式   Ax = b   (23) と書くことができる。
数個、数十個のデータ点から その特徴をつかむ
データ構造とアルゴリズム 第10回 mallocとfree
解析的には解が得られない 方程式を数値的に求める。 例:3次方程式
プログラミング論 I 行列の演算
連立一次方程式 a11x1+a12x2+a13x3+...+a1nxn= b1
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
Scilab で学ぶ  わかりやすい数値計算法 舞鶴高専 電子制御工学科 川田 昌克.
P129 モンテカルロ シミュレーション 乱数を使ったシミュレーション.
常微分方程式と偏微分方程式 1.常微分方程式 独立変数が一個のもの 振動の運動方程式 2.偏微分方程式 独立変数が二個以上のもの
重力3体問題の数値積分Integration of 3-body encounter.
プログラミング演習(2組) 第12回
4. 双曲型偏微分方程式の数値解法入門 双曲型の偏微分方程式(partial differential equation, PDE)の最も簡単なの例として1変数の線形PDE    を考える; この方程式の意味は大雑把に言って、Δx の セル内に流入流出する f の量がフラックス その結果セル内で f.
基礎プログラミング (第五回) 担当者: 伊藤誠 (量子多体物理研究室) 内容: 1. 先週のおさらいと続き (実習)
情報科学 第7回 数値解析(2).
IT入門B2 ー 連立一次方程式 ー.
コンピュータープログラミング (C言語)(8) 1.乱数(復習) 2.配列とその利用
第二回 連立1次方程式の解法 内容 目標 連立1次方程式の掃出し法 初期基底を求める 連立1次方程式を掃出し法を用いてExcelで解析する
4.2 連立非線形方程式 (1)繰返し法による方法
数値解析シラバス C言語環境と数値解析の概要(1回) 方程式の根(1回) 連立一次方程式(2回) 補間と近似(2回) 数値積分(1回)
流体のラグランジアンカオスとカオス混合 1.ラグランジアンカオス 定常流や時間周期流のような層流の下での流体の微小部分のカオス的運動
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
第11回 整列 ~ シェルソート,クイックソート ~
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
第7回 条件による繰り返し.
情報科学 第7回 数値解析(2).
データ解析 静岡大学工学部 安藤和敏
数学 ---> 抽象化、一般化 より複雑な関係ー>解析学 一次関数 y=ax+b より多くの要素ー>線形代数 x y f(x) y1 x1
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
関数の定義.
傾きがわかった関数の軌跡を求める. 変数は二つ以上
プログラミング演習I 行列計算と線形方程式の求解
LU分解を用いた連立一次方程式.
第7回 条件による繰り返し.
第10回 FIR回路とIIR回路.
深海底は海嶺軸から遠ざかるにつれ、規則正しく深くなる。 なぜか?
計測工学 -誤差、演習問題 計測工学(第6回) 2009年5月26日 Ⅱ限目.
原子動力工学特論 レポート1 交通電子機械工学専攻 齋藤 泰治.
高度プログラミング演習 (05).
高度プログラミング演習 (05).
プログラミング 4 整列アルゴリズム.
2分法のプログラム作成方法 2分法のプログラム(全体構成) プログラム作成要領 2分法のメイン関数(変数宣言)
FEM勉強会 (第3回).
Chapter 26 Steady-State Molecular Diffusion
データ解析 静岡大学工学部 安藤和敏
連立一次方程式 a11x1+a12x2+a13x3+...+a1nxn= b1
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
ニュートン法による 非線型方程式の解.
Cプログラミング演習 ニュートン法による方程式の求解.
プログラミング演習I 数値計算における計算精度と誤差
高度プログラミング演習 (07).
3 一次関数 1章 一次関数とグラフ §4 方程式とグラフ         (3時間).
プログラミング入門2 第5回 配列 変数宣言、初期化について
第4回 配列.
プログラミング演習I 補講用課題
空間図形の取り扱いについて.
熱伝導方程式の導出 熱伝導:物質の移動を伴わずに高温側から低温側へ熱が伝わる現象 対流、輻射 フーリエの法則Fourier’s law:
8.数値微分・積分・微分方程式 工学的問題においては 解析的に微分値や積分値を求めたり, 微分方程式を解くことが難しいケースも多い。
Presentation transcript:

原子動力工学特論 課題 3、4 交通電子機械工学専攻 2003310  齋藤 泰治

発表内容 1 ・課題.3 (フィン内部の温度分布) ・ガウスの消去法においての留意点 発表内容 1 ・課題.3 (フィン内部の温度分布) ・ガウスの消去法においての留意点    :軸要素(pivot)、正規化(scaling)について ・プログラム ・実行結果

発表内容 2 ・課題.4 (平板の非定常熱伝導解析) ・差分法(FDE)による解法 ・プログラム ・実行結果 発表内容 2 ・課題.4 (平板の非定常熱伝導解析) ・差分法(FDE)による解法 ・プログラム ・実行結果 ・フーリエ変換(PDE)による解法 ・FDEとPDEの比較

課題.3 Qc T∞ 400℃ Qn Qn+1 300℃ Δx Qn=Qn+1+Qc      

軸要素(pivot)及び正規化(scaling) 6本の連立方程式として解けばよい。 課題2の問2において3本の連立方程式を解くプログラム(3×3)を作成したので、それを6×6に拡張する。 しかし、課題2でのプログラムは、単純にガウスの消去法を行わしただけであったので、そのままだと不具合を起こす。 というのも、人間が手計算で行う時には起こらない、コンピューターでの数値計算において、留意しなければならない問題が発生するからである。

軸要素(pivot) 各段階においけるannで除算を行ってゆく。 これを軸要素(pivot)といい、 0に近いと次の計算での桁落ちが以降すべてに影響し、計算が不安定になる。

正規化(scaling) 方程式の係数の絶対値が極端に違っていると、計算の過程で桁落ち誤差が発生し易くなる。また、先に述べた軸要素(pivot)の問題も発生しやすくなる。そのため、計算前に各係数の絶対値が同程度になるように、調整を行う。これを正規化(scaling)という。 Siは係数aijの最大値、 tiはaij/Siの最大値として、 全ての係数の絶対値をそろえる。 yiを未知数として解けば、解はxiとなる

//----------Gauss-Jordan----------   void sweep(double *pa,double *pt,int n,int m,int *piwork,int ILL) { double max,w; int i,j,k,iw,p,q; for(i=0;i<n;++i){     //正規化 max=fabs(*(pa+m*i)); for(j=0;j<n;++j){ if(max<fabs(*(pa+m*i+j))){ max=fabs(*(pa+m*i+j)); } for(j=0;j<m;++j){ *(pa+m*i+j)=*(pa+m*i+j)/max; max=fabs(*(pa+j)); for(i=0;i<n;++i){ *(pt+j)=max;

for(k=0;k<n;++k){ //掃き出し法 for(i=0;i<n;++i){ //列の入れ替えをする配列の初期設定 *(piwork+i)=i; } for(k=0;k<n;++k){ //掃き出し法 max=fabs(*(pa+m*k+k)); //絶対値の最大の要素を求める(pivot選択) p=k; q=k; for(j=k;j<n;++j){ for(i=k;i<n;++i){ if(max=fabs(*(pa+m*i+j))){ max=fabs(*(pa+m*i+j)); p=i; q=j; if(max<=eps){ //最大値が極端に小さい場合は ILL=1;      //解不能として終了 printf("Matrix is ILL\n"); return; for(i=0;i<n;++i){ //k列とq列を入れ替える w=*(pa+m*i+k); *(pa+m*i+k)=*(pa+m*i+q); *(pa+m*i+q)=w; for(j=k;j<m;++j){ //k行とp行の入れ替え w=*(pa+m*k+j); *(pa+m*k+j)=*(pa+m*p+j); *(pa+m*p+j)=w;

i=*(piwork+k); //入れ替えた列を記憶 *(piwork+k)=*(piwork+q); *(piwork+q)=i;   for(j=k+1;j<m;++j){ *(pa+m*k+j)=*(pa+m*k+j)/(*(pa+m*k+k)); //割る } for(i=0;i<n;++i){ //引く if(i!=k){ *(pa+m*i+j)=*(pa+m*i+j)-*(pa+m*i+k)*(*(pa+m*k+j)); for(j=n;j<m;++j){ //入れ替えた列を戻す for(i=0;i<n;++i){ iw=*(piwork+i); *(pa+m*iw+n-1)=*(pa+m*i+j); *(pa+m*i+j)=*(pa+m*i+n-1)/(*(pt+i)); //正規化されているので } //作業領域から戻し } //未知数を決める return;

実行結果 kax=0.235619 hpx=0.084823 X[11]= 1.0 X[12]= 0.5 X[13]= 0.0 X[14]= 0.0 X[15]= 0.0 X[16]= 0.0 X(17)=321.4 X[21]= 0.0 X[22]=-0.8 X[23]= 0.2 X[24]= 0.0 X[25]= 0.0 X[26]= 0.0 X(27)=-365.7 X[31]= 0.0 X[32]= 0.2 X[33]=-0.6 X[34]= 0.2 X[35]= 0.0 X[36]= 0.0 X(37)=-48.6 X[41]= 0.0 X[42]= 0.0 X[43]= 0.2 X[44]=-0.6 X[45]= 0.2 X[46]= 0.0 X(47)=-48.6 X[51]= 0.0 X[52]= 0.0 X[53]= 0.0 X[54]= 0.2 X[55]=-0.6 X[56]= 0.2 X(57)=-48.6 X[61]= 0.0 X[62]= 0.0 X[63]= 0.0 X[64]= 0.0 X[65]= 0.2 X[66]=-3.1 X(67)=-1644.4 Answer Q(1)=1.000000 T(2)=644.0113 T(3)=611.5981 T(4)=593.0802 T(5)=581.7912 T(6)=573.6670

課題.4 平板の非定常熱伝導方程式 a=2×10-4 (m2/s) L=100 (mm) 100℃ Initial condition: 課題.4 平板の非定常熱伝導方程式 a=2×10-4 (m2/s) L=100 (mm) Initial condition: T(x)=100[℃] at t=0.0 Boundary condition T(x)=0[℃] at x=(0,L) 100℃ L 0℃

差分法(FDE)による解法 熱伝導方程式 n: 時間メッシュ m: 空間メッシュ m-1 m m+1 n n+1 これを差分表示し、整理する unkown known

#define nn 10000 #define mm 100  double T[nn][mm];  main() { double a,dt,dx; int m,n;   a=2.0*(pow(10,-4)); dt=2.0*(pow(10,-3)); dx=1.0*(pow(10,-3)); for(n=1;n<=10000;++n){ // 境界条件 T[n][1]=T[n][100]=0.0; } for(n=1;n<=10000;++n){ // 初期温度(100℃一様) for(m=2;m<=99;++m){ T[n][m]=100.0; for(n=1;n<=9999;++n){       // 差分計算 T[n+1][m]=T[n][m]*(1-2*a*dt/(pow(dx,2)))+a*dt/(pow(dx,2))*(T[n][m+1]+T[n][m-1]); printf("%lf ",T[n][m]); printf("\n");

フーリエ変換(PDE)による解法 熱伝導方程式(拡散方程式) これをフーリエ変換して解くと、 従って、これが解析解となる。

#include <stdio.h> #include <math.h>   #define pi 3.1415926535 main() { double T; double T0,L,a; int t,x,n; T0=100.0; L=100*pow(10,-3); a=2*pow(10,-4); for(t=0;t<=100;++t){ printf("t=%d\n",t); for(x=0;x<=100;++x){  T=0.0;  for(n=1;n<=100;n+=2){ T=2/(n*pi)*T0*2*sin(n*pi/L*x*(pow(10,-3)))*exp(-a*pow(n,2)*pow((pi/L),2)*t*0.01)+T; } printf("%lf ",T); printf("\n");  }

×10-3[s]

FDE PDE