① matlab 數值分析編程 (小程序,請高手賜教)
好難選擇啊,不是一下子滅絕,就是一下子飽和。大家試試吧。
clc;clear
%dP/dt=RP(1-P/K)—BP^2/(A^2+B^2)
K=40000000;R=106.3;A=0.000001;B=0.00000000000001;
P=dsolve('DP=R*P*(1-P/K)-B*P^2/(A^2+B^2)','P(0)=5000')
P=simple(P)
P=subs(P)
t=0:10
P=subs(P,'t',t)
plot(t,P)
② MATLAB和數值分析應該先學習哪個
MATLAB和數值分析應該先學習哪個?
這個可以根據自己的數學基礎和編程語言的基礎來判斷:
1、如數學基礎比較好,可以先學習matlab,等基本掌握matlab操作和簡單編程,再學習數值分析
2、如已掌握matlab操作和簡單編程,則可以先學習數值分析
3、如這兩門都是初學,同時學習matlab操作和簡單編程和數值分析的初步,交叉進行
③ 數值分析 Doolittle分解 用matlab做
根據Doolittle分解格式, 可以用matlab分解A矩陣為一個下三角矩陣L與上三角矩陣U的乘積。
其實現過程為:
第一步:初始化
1、初始化上三角陣的第一行
2、初始化下三角陣的第一列
第二步:前向分解計算
④ matlab怎麼做數值分析
用matlab軟體做數值分析相對其他數學要方便的多,如求解非線性方程的數值解,微分方程的數值解,數學模型的預測等等多比較實用。
⑤ matlab編程,跪求大佬解答
題主給出方程可以使用數值分析的方法來解決。由於該方程是一個比較特殊的方程,應考慮合適的數值方法(如弦截法),分析該方程求和式,可以發現x在100-1000之間有最大值,其值 x=732.79727,y = -5.55e-16。
實現思路:
1、自定義f(x)函數,其內容①利用symsum函數求Σ值;②利用eval函數計算f(x)值
2、自定義secant弦截法函數,根據弦截法的迭代公式編寫。
3、運行主代碼
x0=100.5;x1=1205;tol=1e-4; %tol誤差
x=secant(x0,x1,tol)
y=fun(x) %驗證y是否等於0
4、運行結果
⑥ 求高手!!!!!!數值分析實驗用matlab計算
%選取節點
x = -1:2/19:1;
x = single(x);
%計算節點處樣本點
y = exp(x);
y = single(y);
%多項式基函數次數取值
table = [3 5 7 9 11 13 15];
cn = zeros(7,1);
sigma = zeros(7,1);
%多項式基函數次數
for m = 1:7
I = table(m);
%計算系數矩陣
G = zeros(I+1,I+1);
for i = 1:I+1
for j = 1:I+1
if (i==j)
G(i,j) = 2/(2*j-1);
else
G(i,j) = 0;
end
end
end
G = single(G);
%計算系數矩陣的條件數
cn(m) = cond(G);
%計算dd
dd = [2.3504 0.735759 0.143126 0.0201302 0.00221447 0.000199925 0.0000153007 1.01607*10^-6 5.95849*10^-8 3.12823*10^-9 1.48656*10^-10 0.*10^-12 2.57744*10^-13 0.*10^-15 0.*10^-15 0.*10^-18 0.*10^-15]
dd = single(dd);
%計算d
d = zeros(I+1,1);
for i = 1:I+1
d(i) = dd(i);
end
d=single(d);
%求解多項式系數矩陣a
a = inv(G)*d;
a = single(a);
%計算嘞讓德多項式在給定節點處的值
P = zeros(16,20);
for k = 1:20
P(1,k) = 1;
P(2,k) = x(k);
P(3,k) = (3*x(k)^2-1)/2;
P(4,k) = (5*x(k)^3-3*x(k))/2;
P(5,k) = (35*x(k)^4-30*x(k)^2+3)/8;
P(6,k) = (63*x(k)^5-70*x(k)^3+15*x(k))/8;
P(7,k) = (231*x(k)^6-315*x(k)^4+105*x(K)^2-5)/16;
P(8,k) = (429*x(k)^7-693*x(k)^5+315*x(k)^3-35*x(k))/6;
P(9,k) = (6435*x(k)^8-12012*x(k)^6+6930*x(k)^4-1260*x(k)^2+35)/128;
P(10,k) = (12155*x(k)^9-25740*x(k)^7+18018*x(k)^5-4620*x(k)^3+315*x(k))/128;
P(11,k) = (46189*x(k)^10-109395*x(k)^8+90090*x(k)^6-30030*x(k)^4+3465*x(k)^2-63)/256;
P(12,k) = (88179*x(k)^11-230945*x(k)^9+218790*x(k)^7-90090*x(k)^5+1505*x(k)^3-639*x(k))/256;
P(13,k) = (676039*x(k)^12-1939938*x(k)^10+2078505*x(k)^8-1021020*x(k)^6+225225*x(k)^4-18018*x(k)^2+231)/1024;
P(14,k) = (1300075*x(k)^13-4056234*x(k)^11+484945*x(k)^9-2771340*x(k)^7+765765*x(k)^5-90090*x(k)^3+3003*x(k))/1024;
P(15,k) = (5014575*x(k)^14-16900975*x(k)^12+22309287*x(k)^10-14549535*x(k)^8+4849845*x(k)^6-765765*x(k)^4+45045*x(k)^2-429)/2048;
P(16,k) = (9694845*x(k)^15-35102025*x(k)^13+50702925*x(k)^11-37182145*x(k)^9+14549535*x(k)^7-2909907*x(k)^5+255255*x(k)^3-6435*x(k))/2048;
end
P = single(P);
%計算擬合所得數值
yy = y;
for k = 1:20
sum3 = 0;
for i = 1:I+1
sum3 = sum3+a(i)*P(i,k);
end
yy(k) = sum3;
end
yy = single(yy);
%計算偏差sigma
for k = 1:20
sigma(m) = sigma(m)+(yy(k)-y(k))^2;
end
end
figure(1);
plot(table,log(cn))
hold on
plot(table,log(cn),'r*')
figure(2);
plot(table,sigma)
hold on
plot(table,sigma,'r*')
⑦ 數值分析LU分解 要求matlab編程 求L 和U detA
網上很多高手編的程序,隨便找找就是。
找了一個,你看看。
1.lu分解程序
function
[l,u,detA]
=
mylu(
a
)
%
該程式主是對系數矩陣a進行LU分解,具體演算法可參見數值分析.
n=size(a,2);
u=zeros(size(a));
l=eye(size(a));
u(1,:)=a(1,:);
l(2:end,1)=a(2:end,1)/a(1,1);
for
r=2:n
for
j=r:n
u(r,j)=a(r,j)-l(r,1:r-1)*u(1:r-1,j);
end
for
i=r+1:n
l(i,r)=(a(i,r)-l(i,1:r-1)*u(1:r-1,r))/u(r,r);
end
end
detA=det(a);
2.調用
>>
A=magic(4);
>>
[L,U,detA]=mylu(A)
L
=
1.0000
0
0
0
0.3125
1.0000
0
0
0.5625
0.5663
1.0000
0
0.2500
1.3012
-3.0000
1.0000
U
=
16.0000
2.0000
3.0000
13.0000
0
10.3750
9.0625
3.9375
0
0
-0.8193
2.4578
0
0
0
0
detA
=
0
>>
⑧ 我在學數值分析這門課,其中好多地方用到matlab,想請問關於數值分析的matlab應該怎樣學
下面是我寫的,放心用去啦~~~
%超鬆弛迭代(SOR方法)
function [x k flag]=SOR(A, b, eps ,w,maxl)
%A為方程組的系數矩陣
%b為方程組的右端向量
%eps為精度要求
%maxl為最大迭代次數,預設值為100
%w為超鬆弛因子,默認值為1
%x為方程組的解
%k為迭代次數
%flag為指標變數
%賦初值:
if nargin<5 maxl=100;end
if nargin<4 w=1;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%開始迭代:
while true
y=x; %y,z均為輔助變數
for i=1:n
z=b(i);
for j=1:n
if j~=i
z=z-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
z=z/A(i,i);x(i)=(1-w)*x(i)+w*z;
end
if norm(y-x,inf)<eps
break;
end
k=k+1;
end
%Jacobi迭代法解線性方程組
function [x k flag]=Jacobi(A, b, eps ,maxl)
%A為方程組的系數矩陣
%b為方程組的右端向量
%eps為精度要求
%maxl為最大迭代次數,預設值為100
%x為方程組的解
%k為迭代次數
%flag為指標變數
%賦初值:
if nargin<4 maxl=100;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%開始迭代:
while 1
for i=1:n
y(i)=b(i);
for j=1:n
if j~=i
y(i)=y(i)-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
y(i)=y(i)/A(i,i);
end
if norm(y-x,inf)<eps
break;
end
x=y; k=k+1;
end
稍微調試肯定可以通過,都是經過測試的,記得給我分數呦,謝啦~~~
⑨ 數值分析編程matlab
數值分析有好幾塊啊。
對於積分可以看:http://www.matlabsky.com/thread-7210-1-1.html
常微分方程可以看:http://www.matlabsky.com/thread-526-1-1.html
當然還有其它的一些,看你要什麼方面的。
=============
(一題)
%(1)
clear
n=9;
[ii,jj]=meshgrid(1:n);
A=(ii+jj-1).^2;
%A=(ii+jj).^2; %(2)
%A=1./(ii+jj-1); %(3)
b=sum(A,2);
%%下面兩行是測試函數
%A=rand(n );
%b=rand(n,1);
AA=A;
bb=b;
for i=1:n-1
%選主元
[maindiag(i),index]=max(abs(A(i:end,i)));
index=index+i-1;
%交換行i<--->index
temp=A(index,: );
A(index,: )=A(i,: );
A(i,: )=temp;
temp=b(index);
b(index)=b(i);
b(i)=temp;
%消行
for j=i+1:n
temp=A(j,i)/A(i,i);
A(j,: )=A(j,: )-temp*A(i,: );
b(j )=b(j )-temp*b(i);
end
A;
end
%上三角求解
for i=n:-1:1
for j=1:i-1
temp=A(j,i)/A(i,i);
A(j,: )=A( j,: )-temp*A(i,: );
b(j )=b(j )-temp*b(i);
end
x(i)=b(i)/A(i,i);
end
maindiag %查看列主元
AA*x'-bb %由於矩陣奇異,列主元法得到的解不準確
%%(1)例在n<=6時,列主元法可行,n>6列主元法失效
============
(二題)
clear
x=-5:0.5:5;
x=x(:);
y=[0,-0.0001,-0.0002,-0.0003,-0.0004,-0.0048,-0.0366,-0.1581,-0.3679,-0.3894,0,0.3894,0.3679,0.1581,0.0366,0.0048,0.0004,0.0003,0.0002,0.0001,0];
y=y(:);
yy=[];
ii=1:2:7;
for i=1:length(ii)
p=polyfit(x,y,ii(i));
yy(:,i)=polyval(p,x);
info{i}=num2str([num2str(ii(i)),'次多項式']);
end
p=spline(x,y);
yy(:,end+1)=ppval(p,x);
info{end+1}='樣條';
info{end+1}='原始數據';
plot(x,yy,x,y,'*')
legend(info,'location','NorthWest')