声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 基础理论 查看内容

关于符号变量表达式应用于解方程的问题

2012-12-29 10:33| 发布者: aspen| 查看: 4964| 评论: 0|原作者: mhkmars|来自: 振动论坛

摘要: 大家好! 我现在用matlab的符号运算得到了一串表达式,但是变量都是符号变量,现在我需要将这些表达式用于解方程,现在遇到的问题就是怎样将这些符号变量的表达式变成一个function函数里的数值表达式? 我想了一个 ...
回复 9 # qibbxxt 的帖子

我举个例子如下,因为我的要解的表达似乎比较复杂,我就简化成下面的:
  1. x=sym(ones(1,2)); %初始化
  2. y=sym(ones(1,2));
  3. %a=sym(ones(1,2));
  4. for i=1:2
  5. x(i)=['x' num2str(i) ]; %定义符号变量
  6. y(i)=['y' num2str(i) ];%定义符号变量
  7. %a(i)=['a' '(' num2str(i) ')'];%定义符号变量
  8. a(i)=x(i)^2+y(i); %a(i)中存放的是最终我想要解的方程表达式

  9. end
  10. p=sum(x);
  11. q=sum(y);
  12. b=p-3; %最终待解的表达式
  13. c=q+5; %最终待解的表达式
  14. eval(['f=@(x1,y1)',char(a(1))])
  15. eval(['g=@(x2,y2)',char(a(2))])
  16. eval(['e=@(x1,x2)',char(p)])
  17. eval(['d=@(y1,y2)',char(q)])
复制代码
x,y其实是我要求的未知数
但是由于我要得到方程才能解出x,y,所以我先把他们申明为符号变量,便于得到我想要的方程。也就是这里面的a(1),a(2),b,c。
然后四个未知数,四个方程,就能解出其数值解。
现在,我用eval指令将每一个表达式都能变成函数。经过command window里面验证,f,g,e,d都是可用的。
接下来问题来了:
1。如何将f,g,e,d等组合成一个function?
    因为在我实际要解的方程中,其实是一个非线性方程组,需要用到fsolve命令,其格式为[x,fval]=fsolve('func',x0),所以我想把得到的这四个表达式写在一个function里。
2。如果第一个问题能够解决,并且生成了函数,接下来是第二个问题。在实际中我的x是一个1x12sym的一个变量,y也是1x12sym。那么这样得到的a就很多了,我想知道怎样批量的运用eval(['f=@(x1,y1)',char(a(1))])(因为这里变量较少,我就一个一个的敲进去了),然后再形成可以使用的方程组

本文内容由 mhkmars 提供

最新评论

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-24 22:14 , Processed in 0.033278 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部