声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

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

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

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

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

3# mhkmars

要解方程,需要把x,y,z换为x(1),x(2),x(3)

本来想用strrep替换x为x(1),y为x(2),z为x(3),但是这样一来就把exp中的x也替换了,还要判断,太麻烦了
如何用符号变量,速度太慢
所以建议,你还是将x,y,z等写为x(1),x(2),x(3)

下面是我写的一个小例子,可以进行批量处理,N个变量也可以

1.用子函数
  1. clear;clc;close all
  2. strf={'sin(x(1))+x(2)+x(3)^2*exp(x(1))-4',...;
  3. 'x(1)+x(2)*x(3)',...
  4. 'x(1)*x(2)*x(3)'};
  5. x=[1 2 3];
  6. fsolve(@(x)myfunex0109(x,strf),x)
复制代码
  1. function y=myfunex0109(x,strf)
  2. strf=cellfun(@str2func,strcat({'@(x)'},strf'),'UniformOutput',false);
  3. y=arrayfun(@(x0)strf{x0}(x),1:length(strf));
复制代码
  1. Equation solved.

  2. fsolve completed because the vector of function values is near zero
  3. as measured by the default value of the function tolerance, and
  4. the problem appears regular as measured by the gradient.

  5. <stopping criteria details>


  6. ans =

  7. -0.0002 0.0001 2.0003
复制代码
2.用内嵌函数
  1. function y=myex0109
  2. strf={'sin(x(1))+x(2)+x(3)^2*exp(x(1))-4',...;
  3. 'x(1)+x(2)*x(3)',...
  4. 'x(1)*x(2)*x(3)'};
  5. x0=[1 2 3];
  6. y=fsolve(@myfunex0109,x0);
  7. function y=myfunex0109(x)
  8. strf1=cellfun(@str2func,strcat({'@(x)'},strf'),'UniformOutput',false);
  9. y=arrayfun(@(x0)strf1{x0}(x),1:length(strf));
  10. end
  11. end
复制代码


  1. Equation solved.

  2. fsolve completed because the vector of function values is near zero
  3. as measured by the default value of the function tolerance, and
  4. the problem appears regular as measured by the gradient.

  5. <stopping criteria details>


  6. ans =

  7.    -0.0002    0.0001    2.0003
复制代码

本文内容由 qibbxxt 提供

123

最新评论

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部