作业帮 > 综合 > 作业

MATLAB求解方程系数,重复迭代

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/05/14 09:43:59
MATLAB求解方程系数,重复迭代
MATLAB求解方程系数
如下方程式,其中 v,n已知,v取值与n一一对应.v属于(0.340;0.394;0.434;0.508;0.5893;0.768 ),对应的n属于(1.56747;1.55846;1.55396;1.54822;1.54424;1.53903)要求使用重复迭代随机抽取四个v,n(相互对应)数值以求解不同的a,b,c,d.关系式
n^2=a+b/(v^2-c)-d*v^2
这是我的手动赋值编程syms a b c d
s1=a+b/(0.340^2-c)-d*(0.340^2)-1.56747^2
s2=a+b/(0.394^2-c)-d*(0.394^2)- 1.55846^2
s3=a+b/(0.434^2-c)-d*(0.434^2)-1.55396^2
s4=a+b/(0.508^2-c)-d*(0.508^2)-1.54822^2
[a,b,c,d]=solve(s1,s2,s3,s4)
format long
这样做工作量太大了,希望有人帮忙指导.
MATLAB求解方程系数,重复迭代
试试.
建立一个m文件mysolve.m如下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function chanshu=mysolve(index)
% index是被抽中的四个数的下标组成的向量.可能为[3,1,4,6]等;
v=[0.340;0.394;0.434;0.508;0.5893;0.768];
n=[1.56747;1.55846;1.55396;1.54822;1.54424;1.53903];
vv=v(index);
nn=n(index);
%用匿名函数建立要求解的函数.参数arg=[a,b,c,d]
s=@(arg) arg(1)+arg(2)./(vv.^2-arg(3))-arg(4)*vv.^2-nn.^2;
%看楼主的意思应该是求数值解,而不是符号解.所以用fsolve函数而不用solve函数.
%下面求的是s在[0;0;0;0]附近的解.
chanshu=fsolve(s,zeros(4,1));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
保存后就可以在命令行中调用如:
mysolve([1;2;3;4])
或随机生成四个下标:
index=randperm(6)
id=index(1:4)
mysolve(id)