① 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')