スライド 1

Similar documents
スライド 1

スライド 1

スライド 1

スライド 1

DVIOUT

航空機の運動方程式

comment.dvi

プログラミング基礎

プログラミング基礎

Taro-数値計算の基礎Ⅱ(公開版)

PowerPoint Presentation

memo

cp-7. 配列

演習2

実際の株価データを用いたオプション料の計算

数値計算法

2011年度 筑波大・理系数学

kiso2-09.key

x(t) + t f(t, x) = x(t) + x (t) t x t Tayler x(t + t) = x(t) + x (t) t + 1 2! x (t) t ! x (t) t 3 + (15) Eular x t Teyler 1 Eular 2 Runge-Kutta

1 4 2 EP) (EP) (EP)

If(A) Vx(V) 1 最小 2 乗法で実験式のパラメータが導出できる測定で得られたデータをよく近似する式を実験式という. その利点は (M1) 多量のデータの特徴を一つの式で簡潔に表現できること. また (M2) y = f ( x ) の関係から, 任意の x のときの y が求まるので,

航空機の運動方程式

高ゼミサポSelectⅢ数学Ⅰ_解答.indd

2014年度 筑波大・理系数学

モデリングとは


Microsoft PowerPoint - 10.pptx

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() 2 double *a[ ]; double 1 malloc() dou

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

Prog1_12th

Gauss

2006年10月5日(木)実施

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

memo

memo

8 / 0 1 i++ i 1 i-- i C !!! C 2

学習指導要領

Microsoft PowerPoint - NA03-09black.ppt

演算増幅器

Prog1_15th

2014年度 九州大・理系数学

2016年度 京都大・文系数学

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

1.ppt

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() malloc 2 #include <stdio.h> #include

1 対 1 対応の演習例題を解いてみた 微分法とその応用 例題 1 極限 微分係数の定義 (2) 関数 f ( x) は任意の実数 x について微分可能なのは明らか f ( 1, f ( 1) ) と ( 1 + h, f ( 1 + h)

Taro-再帰関数Ⅱ(公開版).jtd

情報処理演習 B8クラス

x h = (b a)/n [x i, x i+1 ] = [a+i h, a+ (i + 1) h] A(x i ) A(x i ) = h 2 {f(x i) + f(x i+1 ) = h {f(a + i h) + f(a + (i + 1) h), (2) 2 a b n A(x i )

Microsoft PowerPoint - 14th.ppt [互換モード]

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

Microsoft Word - Cプログラミング演習(9)

2015-2018年度 2次数学セレクション(整数と数列)解答解説

プログラミング基礎

ファイル入出力

Microsoft PowerPoint - program.ppt [互換モード]

Microsoft PowerPoint - H21生物計算化学2.ppt

Taro-最大値探索法の開発(公開版

2011年度 東京大・文系数学

‚æ2›ñ C„¾„ê‡Ìš|

Taro-ファイル処理(公開版).jtd

C 言語第 6 回 1 数値シミュレーション :2 階の微分方程式 ( シラバス10 11 回目 ) 1 2 階の微分方程式と差分方程式微分方程式を 2 d x dx + c = f ( x, t) 2 dt dt とする これを 2 つの 1 階の微分方程式に変更する ìdx = y 2 2 d

Microsoft PowerPoint - 10.pptx

学習指導要領

:30 12:00 I. I VI II. III. IV. a d V. VI

memo

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

頻出問題の解法 4. 絶対値を含む関数 4.1 絶対値を含む関数 絶対値を含む関数の扱い方関数 X = { X ( X 0 のとき ) X ( X <0 のとき ) であるから, 絶対値の 中身 の符号の変わり目で変数の範囲を場合分けし, 絶対値記号をはずす 例 y= x 2 2 x = x ( x

12.2 電気回路網に関するキルヒホッフの法則による解法 2 多元連立 1 次方程式の工学的応用についての例を 2 つ示す.1 つはブリッジ T 型回路, もう 1 つはホーイストンブリッジ回路である. 示された回路図と与えられた回路定数からキルヒホッフの法則を使って多元連立 1 次方程式を導出する

Microsoft PowerPoint - 配布資料・演習18.pptx

2018年度 筑波大・理系数学

DVIOUT-SS_Ma

2017年度 千葉大・理系数学

ファイル入出力

アルゴリズムとデータ構造

学習指導要領

( ) X x, y x y x y X x X x [x] ( ) x X y x y [x] = [y] ( ) x X y y x ( ˆX) X ˆX X x x z x X x ˆX [z x ] X ˆX X ˆX ( ˆX ) (0) X x, y d(x(1), y(1)), d(x

‚æ4›ñ

[1] #include<stdio.h> main() { printf("hello, world."); return 0; } (G1) int long int float ± ±

学習指導要領

Microsoft Word - COMP-MATH-2016-FULLTEXT.doc

Microsoft Word - 町田・全 H30学力スタ 別紙1 1年 数学Ⅰ.doc

PowerPoint プレゼンテーション

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

練習&演習問題

Microsoft PowerPoint - prog04.ppt

memo

カイ二乗フィット検定、パラメータの誤差

Microsoft PowerPoint - kougi9.ppt

C 2 / 21 1 y = x 1.1 lagrange.c 1 / Laglange / 2 #include <stdio.h> 3 #include <math.h> 4 int main() 5 { 6 float x[10], y[10]; 7 float xx, pn, p; 8 in

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

8. 自由曲線と曲面の概要 陽関数 陰関数 f x f x x y y y f f x y z g x y z パラメータ表現された 次元曲線 パラメータ表現は xyx 毎のパラメータによる陽関数表現 形状普遍性 座標独立性 曲線上の点を直接に計算可能 多価の曲線も表現可能 gx 低次の多項式は 計

Microsoft Word - no15.docx

学習指導要領


14 化学実験法 II( 吉村 ( 洋 mmol/l の半分だったから さんの測定値は くんの測定値の 4 倍の重みがあり 推定値 としては 0.68 mmol/l その標準偏差は mmol/l 程度ということになる 測定値を 特徴づけるパラメータ t を推定するこの手


I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

演習課題No12

Transcription:

数値解析 2019 年度前期第 13 週 [7 月 11 日 ] 静岡大学創造科学技術大学院情報科学専攻工学部機械工学科計測情報講座 三浦憲二郎

講義アウトライン [7 月 11 日 ] 関数近似と補間 最小 2 乗近似による関数近似 ラグランジュ補間 T.Kanai, U.Tokyo

関数近似 p.116 複雑な関数を簡単な関数で近似する 関数近似 閉区間 [a,b] で定義された関数 f(x) を g(x)= a i φ i (x) で近似 する. 関数系 φ i (x) は [a, b] 上で連続かつ 1 次独立 関数が 1 次独立とは, 関数の差のノルムの二乗 が最小になるように係数 a i を定める.

関数近似確認問題 1. 2 点 (1,-1), (3,7) を通る直線を求めよ ヒント y=ax+b 2. 次の関数の最小値を求めよ. ff xx, yy = xx 2 + xx yy + 1 + yy 2 3. 最小 2 乗法を用いて,3 点 (1,-1), (2, 1), (3, 7) を近似する直線を求めよ.

関数近似確認問題解答 1. 2 点 (1,-1), (3,7) を通る直線を求めよ (y+1)=a(x-1), 7+1=a(3-1), a=4, b=-5 2. 次の関数の最小値を求めよ. dddd = 2xx + yy + 1 = 0, dddd dddd ddyy xx = 2, yy = 1, 3 3 = xx + 2yy = 0 3. 最小 2 乗法を用いて,3 点 (1,-1), (2, 1), (3, 7) を近似する直線を求めよ. yy = 4aa 17 3

定理 6.1 p.117 関数系 φ i が 1 次独立であれば,(6.1) のノルム 22 を最小にする係数は 連立 1 次方程式 (φφ 0, φφ 0 ) (φφ 0, φφ nn 1 ) (φφ nn 1, φφ 0 ) (φφ nn 1, φφ nn 1 ) aa 0 aa nn 1 = (ff, φφ 0 ) (ff, φφ nn 1 ) の解として一意に決定される. ここで,[a, b] 上の連続関数 f(x) と g(x) に対して

定理 6.1 p.117 ( 証明 ) (6.1) より が最小になるには極値の必要条件を満たさなければならない. 連立 1 次方程式 (6.2) を解くことと同値.

グラム行列式 p.117 要素 x 0, x 1,,x n-1 が線形独立であることと, 以下のグラム行列式が 0 でない ことと同値.(6.2) はただ 1 つの解を持つ. 定理 6.2 φ i =x i (i=0,1,2, ) は [a,b] で連続であり, かつ 1 次独立である. ( 証明 ) 任意の自然数 n に対して, と仮定すると, 閉区間 [a,b] の任意の t に対して 0, したがって なぜならば, n 次方程式の解は高々 n 個.

関数近似の例 p.118 例 6.3 f(x)=x 2 に対する最小 2 乗近似 1 次式 g(x)=a 0 + a 1 x を [0,1] で求めよ. φ 0 (x)=1, φ 1 (x)=x とすると したがって,a 0 = -1/6, a 1 = 1. よって y=x-1/6.

定理 6.4 p.119 m 組の与えられたデータ (x 0,y 0 ), (x 1,y 1 ),,(x m-1,y m-1 ) を通る関数 f(x) を g(x)= a i φ i (x) によって近似することを考える. が最小になるように a 0, a 1,,a n-1 を決定する. 連立 1 次方程式 の解である.

#include <stdio.h> #include <stdlib.h> #include <math.h> 最小 2 乗近似 : プログラム :p.120 #define M 6 /* データのペア数 */ #define N 3 /* N 次式で近似 */ /* ベクトルの入力 */ void input_vector2( double *b, char c, int n, FILE *fin, FILE *fout); /* 部分ピボット選択付きガウス消去法 */ void gauss2( double a[n+1][n+1], double b[n+1], int n ); /* 最小 2 乗近似 */ void least_square( double *x, double *y, FILE *fout ); int main(void) { FILE *fin, *fout; double x[m], y[m]; /* ファイルのオープン */ if ( (fin = fopen( "input_func.dat", "r")) == NULL ) { printf(" ファイルが見つかりません : input_func.dat n"); exit(1); if( (fout = fopen( "output_func.dat", "w")) == NULL ) { printf(" ファイルが作成できません : output_func.dat n"); exit(1); input_vector2( x, 'x', M, fin, fout ); /* ベクトル x の入出力 */ input_vector2( y, 'y', M, fin, fout ); /* ベクトル y の入出力 */ least_square( x, y, fout ); /* 最小 2 乗近似 */ fclose(fin); fclose(fout); /* ファイルのクローズ */ return 0; void least_square( double x[m], double y[m], FILE *fout ) { double a[n+1], p[n+1][n+1]; int i, j, k; /* 右辺ベクトルの作成 */ for(i=0; i <= N; i++) { a[i]=0.0; for( j = 0; j < M; j++) { a[i] += y[j]*pow(x[j],(double)i) ; /* 係数行列の作成 */ for( i = 0; i <= N; i++) { for( j = 0; j <= i; j++ ) { p[i][j]=0.0; for( k =0; k < M; k++) { p[i][j] += pow( x[k], (double)(i+j) ); p[j][i] = p[i][j]; /* 連立 1 次方程式を解く. 結果は a に上書き */ gauss2( p, a, N+1 ); /* 結果の出力 */ fprintf( fout, " 最小 2 乗近似式は y ="); for( i = N ; i >= 0 ; i--) { if(a[i]>0){ if(i==n){ fprintf(fout, " %5.2f x^%d ", a[i],i); else{ fprintf(fout, "+ %5.2f x^%d ", a[i],i); else{ fprintf(fout, "- %5.2f x^%d ", fabs(a[i]),i); fprintf(fout, " n");

最小 2 乗近似 : 実行結果 p.123 input_func.dat 0.0 0.2 0.4 0.6 0.8 1.0 2.0 2.12 1.62 2.57 1.53 2.0 3 2.5 output_func.dat ベクトル x は次の通りです 0.00 0.20 0.40 0.60 0.80 1.00 ベクトル y は次の通りです 2.00 2.12 1.62 2.57 1.53 2.00 最小 2 乗近似式は y = 0.38 x^3-0.76 x^2 + 0.28 x^1 + 2.00 x^0 2 1.5 1 系列 1 系列 2 0.5 0 0 0.2 0.4 0.6 0.8 1 1.2

ラグランジュ補間 p.124 点 (x 0,f 0 ), (x 1,f 1 ),, (x n,f n ) が与えられたとき, これらすべての点 (x i,f i ) を通る曲線 y=f(x) を求めて x 0 < x < x n の与えられた点以外の関数値を求めることを補間, 内挿 (interpolation) するとういう. f k = f(x k ), k=0,1,,n が与えられたとき, 等式 P(x k ) = f k, k=0,1,,n を満たす多項式 P(x) を f(x) の補間多項式という. 定理 6.5 補間条件を満たすn 次多項式 P n (x) はただ1つに定まる. V の行列式 : バンデルモンド (Vandermonde) の行列, 解が 1 つに定まる.

ラグランジュ補間 p.125 n 次のラグランジュ補間多項式, ラグランジュ補間 (Lagrange interpolation) 基本多項式 l i (x) の点 x k (0 k n) での値は

関数近似確認問題解答 3. ラグランジュ補間を用いて (1,-1), (2,-1), (3, 7) を通る 2 次曲線を求めよ.

関数近似確認問題解答 3. ラグランジュ補間を用いて, を用いて (1,-1), (2,1), (3, 7) を通る 2 次曲線を求めよ. ll 0 = (xx xx 1)(xx xx 2 ) (xx 0 xx 1 )(xx 0 xx 2 ), ll 1= (xx xx 0)(xx xx 2 ) (xx 1 xx 0 )(xx 1 xx 2 ), ll 2= (xx xx 0)(xx xx 1 ) (xx 2 xx 0 )(xx 2 xx 1 ) ll 0 = (xx 2)(xx 3) 2, ll 1 = (xx 1)(xx 3), ll 2 = (xx 1)(xx 2) 2 yy = 2xx 2 4xx + 1

ラグランジュ補間 : プログラム p.125 #include <stdio.h> #include <stdlib.h> #define N 9 /* ベクトルの入力 */ void input_vector3( double b[n+1], char c, FILE *fin ); /* ラグランジュ補間 */ double lagrange( double x[n+1], double y[n+1], double xi ); int main(void) { FILE *fin, *fout; double x[n+1], y[n+1], xi; /* xi は補間点 */ printf(" 補間点を入力してください --->"); scanf("%lf", &xi); /* ファイルのオープン */ if ( (fin = fopen( "input_lag.dat", "r")) == NULL ) { printf(" ファイルが見つかりません : input_lag.dat n"); exit(1); if( (fout = fopen( "output_lag.dat", "w")) == NULL ) { printf(" ファイルが作成できません : output_lag.dat n"); exit(1); input_vector3( x, 'x', fin ); /* ベクトルxの入出力 */ input_vector3( y, 'y', fin ); /* ベクトルyの入出力 */ printf(" 補間の結果は P(%f)=%f n", xi, lagrange(x,y,xi) ); /* グラフを描くために結果をファイルに出力 */ for( xi = x[0]; xi <= x[n]; xi += 0.01 ) { fprintf(fout, "%f t %f n", xi, lagrange(x,y,xi) ); fclose(fin); fclose(fout); /* ファイルのクローズ */ return 0; /* ラグランジュ補間 */ double lagrange( double x[n+1], double y[n+1], double xi ) { int i, k; double pn = 0.0, li; /* P_n(x) の計算 */ for ( i = 0; i <= N ; i++ ) { li = 1.0; /* l_i(x) の計算 */ for( k = 0; k <= N; k++ ) { if( k!= i ) li *= (xi -x[k]) / (x[i]-x[k]); pn += li * y[i]; return pn; /* b[0...n] の入力 */ void input_vector3( double b[n+1], char c, FILE *fin ) { int i; for( i = 0 ; i <= N ; i++) { fscanf(fin, "%lf", &b[i]);

ラグランジュ補間 : 実行結果 input_lag.dat 0.0 0.2 0.4 0.6 0.8 1.2 1.4 1.6 1.8 2.0 2.0 2.1 1.6 2.6 1.5 2.7 0.67 3.5 0.94 2.0 10 8 6 4 2 0-2 -4 0 0.5 1 1.5 2 2.5 系列 1 系列 2-6 -8-10

関数近似確認問題 4. 2 次関数 y = 2x 2-4x + 1 を 1 <=x <= 3 の範囲で最良に近似する 1 次関数 y=a 0 + a 1 x を求めよ.

関数近似確認問題解答 4. 2 次関数 y = 2x 2-4x + 1 を 1 <=x <= 3 の範囲で最良に近似する 1 次関数 y=a 0 + a 1 x を求めよ. 2 4 4 26 3 aa 0 aa 1 = 10 3 28 3 yy = 4xx 19 3

まとめ 関数近似と補間 最小 2 乗近似による関数近似 ラグランジュ補間 T.Kanai, U.Tokyo