查看: 673|回复: 9|关注: 0

[已解决] 求助:求解方程组时,怎么给符号参数赋值

[复制链接]

新手

7 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
本帖最后由 重症被虐用户 于 2019-8-22 09:59 编辑

求助:求解方程组时,怎么给符号参数赋值?
https://www.ilovematlab.cn/thread-135329-1-1.html
(出处: MATLAB中文论坛)
如何利用matlab求解带有变参数的非线性方程组
https://www.ilovematlab.cn/thread-307833-1-1.html
(出处: MATLAB中文论坛)

!!!!!!以下代码运行环境:2016ra

syms x1 x2 k v theta L1 L2 I1 I2
k=0.6;
v=0.1;
theta=0.3;
L1=1500;
L2=1000;
I1=800;
I2=1000;
[x1,x2]=solve('(k*x1+1)^2*(k*x2+1)=k*v*((L1-I1)*v+(1+theta)*(k*x2+1)*I1)','(k*x2+1)^2*(k*x1+1)=k*v*((L2-I2)*v+(1+theta)*(k*x1+1)*I2)','x1','x2');
x1=vpa(x1,0);
x2=vpa(x2,0);


%%%%%%问题1:没法直接求x1和x2的解,所以需要求数值解,但是现在数值解基于上面的代码无法求出来。
%%%%%%问题2:需要求参数与变量x1和x2的关系图,上面代码中的七个均是参数。
%%%%%%我的需求:如何求x1和x2的数值解,并画出k和theta与两个变量的关系图(最好和第二链接一样有for循环)。
%%%%%%%求路过的大神茶余饭后给出详细的指导和代码,跪谢!!
                      鄙人从没学过matlab,论文需要被逼无奈啊啊啊啊!!!!!!





入门

383 麦片

财富积分


50500


40

主题

1773

帖子

83

最佳答案
  • 关注者: 16
发表于 2019-8-22 22:30:11 | 显示全部楼层
解决问题1的代码,后续问题需求说明不清,无法提供帮助。
  1. clear
  2. clc
  3. syms x1 x2
  4. k=0.6;
  5. v=0.1;
  6. theta=0.3;
  7. L1=1500;
  8. L2=1000;
  9. I1=800;
  10. I2=1000;
  11. ff1 = (k*x1+1)^2*(k*x2+1) - k*v*((L1-I1)*v+(1+theta)*(k*x2+1)*I1);
  12. ff2 = (k*x2+1)^2*(k*x1+1) - k*v*((L2-I2)*v+(1+theta)*(k*x1+1)*I2);
  13. [X1 X2] = solve(ff1,ff2);
  14. x1 = vpa(X1,4)
  15. x2 = vpa(X2,4)
复制代码

新手

7 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2019-8-23 09:01:55 | 显示全部楼层
本帖最后由 重症被虐用户 于 2019-8-23 09:12 编辑
pzfs1016 发表于 2019-8-22 22:30
解决问题1的代码,后续问题需求说明不清,无法提供帮助。

前辈,您给出的这个代码我可以运行了,谢谢您!

以下是我的问题描述:
%%%问题1:您给出的代码求得数值解有好几个,是需要自己去取舍吗?(x1与x2都要满足大于0)
%%%问题2:我现在需要画出x1与k、x2与k的关系变化图。因此我在您的代码上面做了修改,修改如下:
code:
%{

clear
clc
syms x1 x2
k=linspace(0,2,100);
v=0.1;
theta=0.3;
L1=1500;
L2=1000;
I1=800;
I2=1000;
for i=1:100
ff1 = (k(i)*x1(i)+1)^2*(k(i)*x2(i)+1) - k(i)*v*((L1-I1)*v+(1+theta)*(k(i)*x2(i)+1)*I1);
ff2 = (k(i)*x2(i)+1)^2*(k(i)*x1(i)+1) - k(i)*v*((L2-I2)*v+(1+theta)*(k(i)*x1(i)+1)*I2);
[X1(i), X2(i)] = solve(ff1,ff2);
x1(i) = vpa(X1(i),2)
x2(i) = vpa(X2(i),2)
end
plot(k,x1,'ro',k,x2,'b')

%}

%%%%以上代码无法运行。前辈能否帮忙修改代码?或者如果无法这样实现的话,需要其他什么方法可以画出这样的关系图。
再次感谢您的热情帮助!

入门

383 麦片

财富积分


50500


40

主题

1773

帖子

83

最佳答案
  • 关注者: 16
发表于 2019-8-23 23:33:35 | 显示全部楼层
本帖最后由 pzfs1016 于 2019-8-23 23:35 编辑

你的代码问题比较多,不直接指出来了,改后代码见下。
  1. clear
  2. clc
  3. syms x1 x2
  4. k=linspace(0.1,2,100);
  5. v=0.1;
  6. theta=0.3;
  7. L1=1500;
  8. L2=1000;
  9. I1=800;
  10. I2=1000;
  11. for ii=1:100
  12.     ff1 = (k(ii)*x1+1)^2*(k(ii)*x2+1) - k(ii)*v*((L1-I1)*v+(1+theta)*(k(ii)*x2+1)*I1);
  13.     ff2 = ( k(ii)*x2+1)^2*(k(ii)*x1+1) - k(ii)*v*((L2-I2)*v+(1+theta)*(k(ii)*x1+1)*I2);
  14.     [X1, X2] = solve(ff1,ff2);
  15.     X1 = vpa(X1,2);
  16.     X2 = vpa(X2,2);
  17.     XX1(ii,:) = double(X1);
  18.     XX2(ii,:) = double(X2);
  19. end

  20. figure
  21. plot(k,XX1,'--',k,XX2)
  22. xlabel('k')
  23. legend('X1_1','X1_2','X1_3','X2_1','X2_2','X2_3')
复制代码

结果见下

untitled.jpg

入门

383 麦片

财富积分


50500


40

主题

1773

帖子

83

最佳答案
  • 关注者: 16
发表于 2019-8-23 23:52:20 | 显示全部楼层 |此回复为最佳答案
重症被虐用户 发表于 2019-8-23 09:01
前辈,您给出的这个代码我可以运行了,谢谢您!

以下是我的问题描述:

如果考虑解值要为正数,参考下面代码。

  1. clear
  2. clc
  3. syms x1 x2
  4. k=linspace(0.1,2,100);
  5. v=0.1;
  6. theta=0.3;
  7. L1=1500;
  8. L2=1000;
  9. I1=800;
  10. I2=1000;
  11. for ii=1:100
  12.     ff1 = (k(ii)*x1+1)^2*(k(ii)*x2+1) - k(ii)*v*((L1-I1)*v+(1+theta)*(k(ii)*x2+1)*I1);
  13.     ff2 = ( k(ii)*x2+1)^2*(k(ii)*x1+1) - k(ii)*v*((L2-I2)*v+(1+theta)*(k(ii)*x1+1)*I2);
  14.     [X1, X2] = solve(ff1,ff2);
  15.     X1 = vpa(X1,2);
  16.     X2 = vpa(X2,2);
  17.     XX1(ii,:) = double(X1);
  18.     XX2(ii,:) = double(X2);
  19. end

  20. % 去除非正数解,在给定k取值区域内没有全正数解
  21. % nn = length( XX1(1,:) );
  22. % jj = [];
  23. % for ii = 1:nn
  24. %     if all( XX1(:,ii) >= 0 ) && all( XX2(:,ii) >= 0 )
  25. %         jj = [jj ii];
  26. %     end
  27. % end

  28. for ii = 1:nn
  29.     figure
  30.     plot(k,XX1(:,ii),'--',k,XX2(:,ii))
  31.     xlabel('k')
  32.     legend(['X1_' num2str(ii)],['X2_' num2str(ii)])
  33. end
复制代码


在给定的k值区域内,没有全正数解,只有第4组解最接近全正数。如下图所示。
untitled.jpg

新手

7 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2019-8-24 17:29:50 | 显示全部楼层
pzfs1016 发表于 2019-8-23 23:52
如果考虑解值要为正数,参考下面代码。

前辈真的太感谢您了,目前代码都能运行,回头我好好学习学习。非常感谢!!
我想请问一下您,由于我论文需要,总是需要做仿真,数值分析画图,就类似这种方程解不出来的时候就需要求数值解,请问您能否跟我说说如果是基于这样的目的,我该怎么学习matlab呢?因为我不清楚自己要怎么系统的学这些东西,每次画图搞代码都是到处找套路,觉得不会变通,所以想系统的学习,这样论文写起来也比较轻松。

入门

383 麦片

财富积分


50500


40

主题

1773

帖子

83

最佳答案
  • 关注者: 16
发表于 2019-8-25 12:01:57 | 显示全部楼层
重症被虐用户 发表于 2019-8-24 17:29
前辈真的太感谢您了,目前代码都能运行,回头我好好学习学习。非常感谢!!
我想请问一下您,由于我论文 ...

关键是要打好基础,熟悉matlab的基本操作和基本的数学原理,没有什么捷径。
建议:

1. 找一本matlab的基础书学习一遍,结合软件调试练习;

2. 结合自己的专业,利用matlab解决几项简单的专业问题,锻炼综合运用能力。

新手

7 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2019-8-26 15:52:24 | 显示全部楼层
pzfs1016 发表于 2019-8-23 23:52
如果考虑解值要为正数,参考下面代码。

Q1:前辈这个代码我有几个地方不理解,第14--19行的X是大写,代表的是向量(数组)吗?
Q2:第17/18、22、23、26行不明白是具体什么意思?(第17/18行我理解的是左边是矩阵,右边是向量)


入门

383 麦片

财富积分


50500


40

主题

1773

帖子

83

最佳答案
  • 关注者: 16
发表于 2019-8-26 22:08:54 | 显示全部楼层
重症被虐用户 发表于 2019-8-26 15:52
Q1:前辈这个代码我有几个地方不理解,第14--19行的X是大写,代表的是向量(数组)吗?
Q2:第17/18、22 ...

A1:  X的大小写和变量种类没关系,x可以是矩阵,X也可以是标量,这里的X表示的就是方程的解。

A2:  坐标是矩阵,对其ii行所对应的向量进行赋值,将等号右边的值赋给这个向量。

入门

383 麦片

财富积分


50500


40

主题

1773

帖子

83

最佳答案
  • 关注者: 16
发表于 2019-8-26 22:11:45 | 显示全部楼层
重症被虐用户 发表于 2019-8-26 15:52
Q1:前辈这个代码我有几个地方不理解,第14--19行的X是大写,代表的是向量(数组)吗?
Q2:第17/18、22 ...

nn = length( XX1(1,:) );    求解 XX1(1,:) 向量的长度

jj = []                              初始化变量jj为空数组

jj = [ jj  ii ]                       将ii连接到jj后面,构成新向量jj
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表