biancan 2021-11-04 09:58 采纳率: 100%
浏览 78
已结题

请问MATLAB中利用牛拉法解含参数的方程如何求解呢?

目的是输出X有一定范围,根据这个范围反推出f(x)系数的取值范围。我的思路是将变系数作为字母a传入函数,最后解得的X结果中含有字母a,再根据限制范围计算字母a的范围。该常数只存在于f()的个别行中
尝试使用sysm 但是报错了,其中求解f(x)使用的函数:
disp(norm(f(x(1,:))));
for n=2:length(x)
x(n,:)=x(n-1,:)-((J(x(n-1,:))^(-1))*f(x(n-1,:)))';
disp(norm(f(x(n,:))));
end
感谢指导!
报错显示:
从 sym 转换为 double 时出现以下错误:
Unable to convert expression into double array.

出错 try_d (line 68)
x(n,:)=x(n-1,:)-((Jp(x(n-1,:))^(-1))*fp(x(n-1,:)))';

  • 写回答

2条回答 默认 最新

  • 技术专家团-Joel 2021-11-04 10:33
    关注

    你好同学,建议用牛顿拉夫逊方法时不要使用符号,那样太拖慢速度了,而且符号变量与双精度实型变量之间转换特别麻烦。给你举个简单的例子你看看
    如果用符号,尝试一下:

    x(n,:)=x(n-1,:)-((J(x(n-1,:))^(-1))*f(x(n-1,:)))';
    

    你可以参考我之前的N-R系列

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    biancan 2021-11-07 23:25

    我的问题是 这个系数其实是未知的 那在牛拉迭代的时候应该如何表示呢?

    回复
    技术专家团-Joel 回复 biancan 2021-11-08 00:07

    什么系数未知呢?J是未知的吗,可不可以把代码贴全呢

    回复
    biancan 回复 技术专家团-Joel 2021-11-08 13:56

    您好,感谢您的耐心哇。
    J是已知的
    f里面含有未知数
    代码具体为:
    clear
    clc

    V1=1.01;

    ZL12=0.02+i0.01;
    ZL23=0.03+i
    0.01;
    Zload2=9.8+i1.96;
    Sload3=0.2+i
    0.05;

    YL12=1/ZL12;
    YL23=1/ZL23;
    Yload2=1/Zload2;
    Pload3=real(Sload3);
    Qload3=imag(Sload3);
    sysm Qp=0.2
    %这里求导后的J里面不含该参数,但是方程第一二行是含有的。所以我在想迭代的时候会不会出错
    %另外,想要根据迭代的最后结果V在0.8-1.2之间来求得Pp的取值范围,不晓得我的问题表达清楚了没有
    %sysm Sp=0.8
    %Pp=real(Sp)
    %Qp=imag(Sp)

    Y=[YL12,-YL12,0;
    -YL12,YL12+YL23+Yload2,-YL23;
    0,-YL23,YL23];

    G12=real(Y(1,2));
    B12=imag(Y(1,2));

    G22=real(Y(2,2));
    B22=imag(Y(2,2));

    G23=real(Y(2,3));
    B23=imag(Y(2,3));

    G33=real(Y(3,3));
    B33=imag(Y(3,3));

    f=@(V2,V3,theta2,theta3) [V1V2(G12cos(theta2)+B12sin(theta2))+V2V2G22+V2V3(G23cos(theta2-theta3)+B23sin(theta2-theta3))+Pp; V2V3(G23cos(theta3-theta2)+B23sin(theta3-theta2))+V3V3G33+Pload3-Pp; V1V2(G12sin(theta2)-B12cos(theta2))-V2V2B22+V2V3(G23sin(theta2-theta3)-B23cos(theta2-theta3)); V2V3(G23sin(theta3-theta2)-B23cos(theta3-theta2))-V3V3B33+Qload3];

    J=@(V2,V3,theta2,theta3) [V1*(G12cos(theta2)+B12sin(theta2))+2V2G22+V3*(G23cos(theta2-theta3)+B23sin(theta2-theta3)),V2*(G23cos(theta2-theta3)+B23sin(theta2-theta3)),V1V2(-G12sin(theta2)+B12cos(theta2))+V2*(-G23sin(theta2-theta3)+B23cos(theta2-theta3)),V2V3(G23sin(theta2-theta3)-B23cos(theta2-theta3));V3*(G23cos(theta3-theta2)+B23sin(theta3-theta2)),V2*(G23cos(theta3-theta2)+B23sin(theta3-theta2))+2V3G33,V2V3(G23sin(theta3-theta2)-B23cos(theta3-theta2)),V2V3(-G23sin(theta3-theta2)+B23cos(theta3-theta2));V2V1(G12sin(theta2)-B12cos(theta2))-2V2B22+V3*(G23sin(theta2-theta3)-B23cos(theta2-theta3)),V2*(G23sin(theta2-theta3)-B23cos(theta2-theta3)),V1V2(G12cos(theta2)+B12sin(theta2))+V2V3(G23cos(theta2-theta3)+B23sin(theta2-theta3)),V2V3(-G23cos(theta2-theta3)-B23sin(theta2-theta3));V3*(G23sin(theta3-theta2)-B23cos(theta3-theta2)),V2*(G23sin(theta3-theta2)-B23cos(theta3-theta2))-2V3B33,V2V3(-G23cos(theta3-theta2)-B23sin(theta3-theta2)),V2V3(G23cos(theta3-theta2)+B23sin(theta3-theta2))];

    fp=@(x) f(x(1),x(2),x(3),x(4));
    Jp=@(x) J(x(1),x(2),x(3),x(4));

    x=zeros(3,4);
    x(1,:)=[1.01,1.01,0,0];
    disp(norm(fp(x(1,:))));
    for n=2:length(x)
    x(n,:)=x(n-1,:)-((Jp(x(n-1,:))^(-1))*fp(x(n-1,:)))';
    disp(norm(fp(x(n,:))));
    end
    disp('Solution:');
    disp(x(n,:));

    回复
    展开全部7条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月11日
  • 修改了问题 11月4日
  • 创建了问题 11月4日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部