注册 登录
编程论坛 Matlab

[求助]怎样直接将数值变量直接代入符号表达式进行数值计算

yanhe3302 发布于 2006-08-26 17:24, 7495 次点击

简单举个例子,有程序
syms fy1
g=0.75-0.24*sin(3*fy1+3*pi/2);
f=atan(t);
delta1=compose(f,g);
delta1_fy1=diff(delta1,'fy1')

s1=sqrt((52*delta1_fy1).^2+(52*sin(delta1)).^2)
得到结果:
54/25*(324*sin(3*fy1)^2/(1+(3/4+6/25*cos(3*fy1))^2)^2+625*(3/4+6/25*cos(3*fy1))^2/(1+(3/4+6/25*cos(3*fy1))^2))^(1/2)
有没有什么方法将变量fy1的数值直接代入计算,或者将上述的表达式转化为“. * ”、“. / ”、“. ^ ”形式。
我实际用到的运算表达式很长,每次都是手工加“.”来转化运算符,再代入数值型变量计算,很麻烦,工程太大了,谁能救我出苦海啊,不胜感激!!!!

16 回复
#2
mylover6242006-08-26 20:54

把你的结果用不个变量来保存(如:a)
string b ="";
b = a.Replace("\*","\.\*);
string c = "";
c = b.Replace("\/","\.\/")'
string d = "";
d = c.Replace("\^","\.\^");
d就是你需要的.再把d转换成算式形就可以了.
(也可以用数组.循环判断,并改正)

#3
yanhe33022006-08-27 14:18

6个句子就能解决的问题,每次都都要花20分钟。谢谢,谢谢!!!!!

什么函数可以将string转化成算式形啊

#4
mylover6242006-08-27 15:42
int.Parse("你要转换的string形");
#5
yanhe33022006-08-27 19:40
多谢你出手救我啊,这么快就能得到答复,终于出苦海了
#6
yanhe33022006-08-27 21:26
syms fy1 ;
fy2=3*fy1/4+0.08*cos(3*fy1+3*pi/2);
g=0.75-0.24*sin(3*fy1+3*pi/2);
delta1=atan(g);
delta2=pi/2-delta1;
z2=52*cos(fy2)*sin(delta2);
y2=52*sin(fy2)*sin(delta2);
x2=52*cos(delta2);
delta2_fy1=diff(delta2,'fy1') ;
char a="";
a=sqrt((52*delta2_fy1)^2+(52*sin(delta2)*g)^2)
char b ="";
b = a.Replace("\*","\.\*");
char c = "";
c = b.Replace("\/","\.\/");
char d = "";
d = c.Replace("\^","\.\^")
这样写没错吧,但是提示错误:
??? Error: File: D:\ProgramFiles\matlab\work\Untitled4.m Line: 13 Column: 15
Missing variable or function.
还要请你指正啊
#7
mylover6242006-08-27 22:05
怎么用char形呢?[CODE]sqrt((52*delta2_fy1)^2+(52*sin(delta2)*g)^2)[/CODE]这个好像不能用char吧,呵呵.
要么就用数组.

[此贴子已经被作者于2006-8-27 22:06:11编辑过]

#8
yanhe33022006-08-28 08:55

我用的是6.5版本的matlab,系统提示说string已经废弃了,可换为char形

#9
mylover6242006-08-28 11:08
那就用数组吧.
#10
yanhe33022006-08-30 20:27

试试看,谢谢你的细心指导,一直跟贴[em34

#11
yanhe33022006-09-02 17:01
我diy解决了,还是贴出来,希望可以帮到其他人。

a=strrep('需要编辑的字符表达式','*','.*');
b=strrep(a,'/','./');
c=strrep(b,'^','.^');
我会继续关注此帖,有人有问题的话,可以提出来,我会尽力帮忙的,大家一起努力啊
#12
sun1111102006-09-06 20:19

兄弟: 我有其他的问题你能不能帮帮我啊?/?
比如:f=solve('sin(x)=cos(x)') 可以直接得出 f=1/4*pi
但是为什么:g=solve('sin(x)-300*sin(70-x)*cos(70-x)=0') 就运算不下去呢??
帮帮我谢谢袄

#13
yanhe33022006-09-07 09:03
我也有同样的问题,不过我换了种方法,好像可以。你参考一下
syms x;
f=sin(x)-300*sin(70-x).*cos(70-x);
g=solve(f)
#14
sun1111102006-09-07 11:10

谢谢帮忙!
你给的我可以进行运算了!不过在显示一串数值显示过程会把命令窗口的东西都顶掉!
而且应该是显示: g=
20+0.210.21
一串数值!可是他显示的直接就是一个大的数值!
是不是因为数值太大了 所以产生了这种后果呢!?
#15
yanhe33022006-09-07 14:16
这个我也不太清楚,不过要看结果的话,可在“workspace”中,点所得的结果用右键打开。我看了一下你的结果是很长,可以用
double(你的结果)
化简试试看
#16
zhangenter2006-09-08 22:43
vpa(g,10)保留10位小数,你可以用这样的方法
#17
sun1111102006-09-11 10:20
我用double做了一下,最后给了我四个数值!有两个是复数肯定不合题意,还有两个代回原来的方程 很接近了已经!
是不是double以后就相当于有的地方是近似值了呢?不过差的还算可以(应该是0结果是0.0082)请你喝咖啡 感谢感谢你这么帮忙 哈哈^
1