資源簡介
研究生課程計算方法A上機作業:
1.QR分解 2.共軛梯度法 3.三次樣條 4.龍格-庫塔
代碼片段和文件信息
%%%%?--------共軛梯度法求解線性方程組---------%%%%
%?%%?參數說明
%?A???--系數矩陣,方程Ax=b中的A矩陣,人為給定
%?b???--方程Ax=b中的b矩陣,人為給定
%?x0??--迭代初始值,人為給定
%?e???--給定精度ε,人為給定
%?n???--迭代次數,人為給定
%?r???--殘向量r(k)
%?r_??--殘向量r(k+1)
%?a???--搜索步長α
%?bt??--代表β
%?norm_r???--r(k)的2范數
%?norm_r_??--r(k+1)的2范數
close?all;?clear?all;?clc
disp(‘-----共軛梯度法求解線性方程組-----‘)
prompt1=‘請輸入系數矩陣A\n‘;
A?=?input(prompt1);?????????????????????%?輸入一個矩陣用于計算
%%?本算法中檢測了矩陣A是否為對稱正定矩陣,矩陣A對稱非正定矩陣,-A為對稱正定矩陣,本例題計算得為?-Ax?=?-b;
e?=?0.001;
n?=?500;
[m_An_A]?=?size(A);???????????????????%?獲取矩陣的維數
flag?=?1;????????????????????????????%?標志變量,用于檢測系數矩陣A是否為對稱正定矩陣
%%?判斷矩陣A是否是對稱正定矩陣
if?m_A?==?n_A
????for?q?=?1:length(A)
????????c?=?mat2cell(A[qlength(A)-q][qlength(A)-q]);
????????if?det(c{11})<=0
????????????flag?=?0??;?????????????????%?如果順序主子式的行列式小于0,flag置0
????????end
????end????????
else
????flag?=?0;
end
%%?計算
if?flag?==?0???????????????????????????
????disp(‘錯誤!矩陣A不是對稱正定矩陣。‘)????%?如果A不是對稱正定矩陣,不執行迭代操作,輸出提示文字
else
????prompt2=‘請輸入對應的矩陣b\n‘;
????b?=?input(prompt2);?????????????????????%?輸入一個矩陣b用于計算
????prompt3=‘請給定初始向量x0\n‘;
????x0?=?input(prompt3);????????????????????%?輸入一個初始向量x0
????prompt4=‘請給定精度ε\n‘;
????e?=?input(prompt4);?????????????????????%?輸入一個給定精度ε,精度滿足要求是跳出循環
????prompt5=‘請給定迭代次數\n‘;
????n?=?input(prompt5)?;????????????????????%?輸入一個對大迭代次數n??
????r_?=?b-A*x0;???????????????????????????%?計算r0,此處r_代表r0
????d?=?r_;????????????????????????????????%?計算d0,此處d代表d0
????x?=?x0;???????????????????
?%%?迭代n次
????for?k?=?0:n-1
????????norm_r_=0;?????????????????????????%?初始化變量,用于計算r(k)和r(k+1)的2范數,注意這個初始化一定要放在迭代循環里邊。
????????norm_r?=0;
????????r?=?r_;
????????a?=?r‘*r?/(d‘*A*d);
????????x?=?x?+?a*d;
????????r_?=?b-A*x;
????????%%?計算r(k)和r(k+1)的2范數
????????for?i_r?=?1:m_A
????????????norm_r_?=?norm_r_+?r_(i_r1)*r_(i_r1);
????????????norm_r??=?norm_r?+?r(i_r1)*r(i_r1);
????????end
????????norm_r_?=?sqrt(norm_r_);
????????norm_r??=?sqrt(norm_r);
????????bt?=?norm_r_*norm_r_/(norm_r*norm_r);????
????????d?=?r_?+?bt*d;
????????%%?判斷精度是否達到要求或迭代次數是否到達上限
????????if?norm_r_<=?e?||?k+1?==?n
????????????break
????????end?
????end???
????disp([‘殘差的2范數為:‘num2str(norm_r_)])
????disp([‘迭代‘num2str(k+1)‘次求得方程的解為:‘])
????x
end
%%%?P113?3.2計算實習參數
%?n=100?A?=?-2*eye(100)+[zeros(1100);eye(99)zeros(991)]+[zeros(991)eye(99);zeros(1100)]
%?n=200?A?=?-2*eye(200)+[zeros(1200);eye(199)zeros(1991)]+[zeros(1991)eye(199);zeros(1200)]
%?n=400?A?=?-2*eye(400)+[zeros(1400);eye(399)zeros(3991)]+[zeros(3991)eye(399);zeros(1400)]
%?n=100?b?=?[-1;zeros(981);-1]????
%?n=200?b?=?[-1;zeros(1981);-1]?
%?n=400?b?=?[-1;zeros(3981);-1]?????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3124??2019-01-05?23:32??程序\Conjugate_Gradient.m
?????文件????????700??2019-01-03?14:47??程序\NewtonInterpolation.m
?????文件????????670??2019-01-03?14:51??程序\NewtonInterpolation1.m
?????文件???????2245??2019-01-05?23:09??程序\QR.m
?????文件???????1262??2019-01-06?09:09??程序\RungeKutta.m
?????文件????????149??2019-01-06?10:19??程序\sf.m
?????文件???????6032??2019-01-06?08:36??程序\Spline.m
?????文件????????456??2018-12-26?22:35??程序\ZG.m
?????目錄??????????0??2019-01-05?23:35??程序
-----------?---------??----------?-----??----
????????????????14638????????????????????9
- 上一篇:VHDL 音樂播放器
- 下一篇:IDEA主題插件4款主題插件
評論
共有 條評論