作业帮 > 综合 > 作业

matlab中求解完方程组后怎样做三维图?(af作为X轴,a作为Y轴,p作为Z轴)

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/01 06:31:05
matlab中求解完方程组后怎样做三维图?(af作为X轴,a作为Y轴,p作为Z轴)
文件trt.m,程序如下:
function trt
fsolve(@myfun,[100,10])
function f=myfun(x)
p=x(1);%作为Z轴
t=x(2);%中间变量
a=0.1;%作为Y轴,范围a=(0:0.05:2)
af=8;%作为X轴,范围af=(0:2:88)
kc=1.2; %定值
b=5;%定值
k1=(p)*cosd(af)*cosd(af)*(pi*a)^0.5;
k2=b*sind(af)*cosd(af)*(pi*a)^0.5;
f(1)=t+acosd((3*k2^2+k1*(k1^2+8*k2^2)^0.5)/(k1^2+9*k2^2));%方程1
f(2)=k1*(cosd(t/2))^3-1.5*k2*sind(t)*cosd(t/2)-kc;%方程2
输出三列的矩阵数组,作出三维面图和等值线图.
kc=1.2; %定值
b=5;%定值
k1=@(x,a,af) x(1).*cosd(af).*cosd(af).*(pi*a).^0.5;
k2=@(a,af,b) b*sind(af).*cosd(af).*(pi*a).^0.5;
f=@(x,a,af,kc,b)[x(2)+acosd((3*k2(a,af,b).^2+k1(x,a,af).*(k1(x,a,af).^2+8*k2(a,af,b).^2).^0.5)./(k1(x,a,af).^2+9*k2(a,af,b).^2));%方程1
    k1(x,a,af).*(cosd(x(2)/2)).^3-1.5*k2(a,af,b).*sind(x(2)).*cosd(x(2)/2)-kc;];%方程2
op=optimset('display','off');

Va=0.4:0.2:2;
Vaf=0:2:88;
[Ma Maf]=meshgrid(Va,Vaf);

Mp=zeros(size(Ma));

for i=1:length(Vaf)
    for j=1:length(Va)
        tp=fsolve(f,[80 -20],op,Ma(i,j),Maf(i,j),kc,b);
        Mp(i,j)=tp(1);
    end
end

surf(Ma,Maf,Mp)
xlabel('a')
ylabel('af')
注意:
1、我把你的代码用句柄包装了,这样能加快运行速度.
2、a在0附近时,会有较大的计算误差,所以讲a的下限取为0.4.若仍需要从零开始计算,可以将Va改为:
Va=eps:0.2:2;