声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2326|回复: 17

[编程技巧] 急求:函数间符号方程的调用问题

[复制链接]
发表于 2009-5-6 12:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
现有一function
function F=shiyan01
syms a b c d e f
H=[sin(a)+2*b-1 cos(b)-1;cos(c)*sin(b)-d+2 a+2-sin(c);d-2*sin(e) 2*a+6-c;f-4*sin(e) sin(d)^2+cos(b)-2;2*e-c*cos(a) a-b-c;d+1 sin(a)+b-2;]
F=H
我想在另外一function里面调用方程H  请问可以怎么做呀?
这两个function我是想编写在同一个M文件下滴。当然本是可以用save命令保存后再调用的,但这样调用后的H的字符就不符合我所需要的了,所以想问问看有没有什么可以直接调用的方法。急需,拜托各位啦!!
回复
分享到:

使用道具 举报

发表于 2009-5-6 16:36 | 显示全部楼层
偶刚试了下,可以在另一个函数里调用。。。也可以在其它文件里直接调用H
请LZ说明一下不能调用的情况以及调用后出现的错误。。
 楼主| 发表于 2009-5-6 20:22 | 显示全部楼层
非常感谢楼上的热心帮助,谢谢!!
我主要是不知道怎么调用。直接写进去的话是不运行的。例子如下:(两个function 都是放在名为shiyan.m的M文件下的。)
function shiyan(q)
syms a b c d e f
q=[a b c d e]
H=[sin(a)+2*b-1 cos(b)-1;cos(c)*sin(b)-d+2 a+2-sin(c);d-2*sin(e) 2*a+6-c;f-4*sin(e) sin(d)^2+cos(b)-2;2*e-c*cos(a) a-b-c;d+1 sin(a)+b-2;]
V=[2*cos(a)-b;3*c^2+sin(e)]
F=H*V
function shiyan01
a=q(1); b=q(2); c=q(3); d=q(4); e=q(5); f=q(6);
v=F
我这样写了后,在命令窗口输入shiyan,可以得出F的结果,但是function shiyan01根本都不运行,也就得不到 v 的结果了。也没有出错信息的。

[ 本帖最后由 ChaChing 于 2009-5-6 20:37 编辑 ]
发表于 2009-5-6 20:48 | 显示全部楼层

回复 板凳 liushuiwuxin 的帖子

我又不清楚LZ要什麽了!?
但试了下LZ的程序, 根本不能运行, 已经出现algebraic loop的问题了!
粗看LZLZ的程序, 输入引数q给什麽? 但LZ马上又给了q=[a b c d e]?
感觉很矛盾!? 到底q是输入引数还是输出变数??
不解!

[ 本帖最后由 ChaChing 于 2009-5-6 20:49 编辑 ]
 楼主| 发表于 2009-5-6 21:00 | 显示全部楼层
q=[a b c d e]其实是不必要的,shiyan(q)里面的 q也是多了的。是我写多了。我是想在function shiyan01 下调用function shiyan里的方程F,并将其赋给v。这个代码在这里其实没有什么作用。只是我随便写出的一个简短的例子来看看能否实现我一楼上说的函数间方程的调用问题。
发表于 2009-5-7 15:08 | 显示全部楼层
看了一下LZ的例子,不知偶是否理解正确:
lz是想调用函数F,然后将F赋值给v,最后得到v的结果
如果是上面这个意思的话,LZ不必用两个函数,一个就行,在命令行里直接调用F就行了。。
PS:lz例子中对变量q这样赋值不是行的。。
 楼主| 发表于 2009-5-7 15:14 | 显示全部楼层
感谢楼上的指点。楼上的理解也完全正确。我上面也有说到过,这里的调用其实是没有实在意义的。这个只是我的一个很简短的没有实在意义的例子。我的目的只是为了检验这种调用是否可以实现。若能实现,我则会会将其调用到我的其他代码里去实现我想到达的功能。还请楼上的能够予以指点!
发表于 2009-5-7 16:04 | 显示全部楼层
偶随便写了个比较简便的函数,不知对lz有没有用:
function Testf=s(x)
Testf=x+2;
end


然后调用:
clear;clc
x=1:3;
Testf=zeros(size(x));
    for i=1:length(x)
       Testf(i)=s(x(i));
    end
v=Testf

[ 本帖最后由 maigicku 于 2009-5-7 16:06 编辑 ]
 楼主| 发表于 2009-5-7 16:23 | 显示全部楼层
这个好像不行哦,都不能运行。而且我要的是在同一个M文件下调用函数的。就像我在三楼给的例子差不多。麻烦你费心了,谢谢啦!
发表于 2009-5-7 16:36 | 显示全部楼层
不能运行??你是不是运行函数文件了??
那个函数文件不要运行,保存即可,然后调用。。

还有LZ为什么要在同一个文件下调用呢???
 楼主| 发表于 2009-5-7 16:44 | 显示全部楼层
是的  有保存 然后在窗口输入第二个引用的。结果是出错,循环出错了  我没有仔细看是错那里了  我要放在用一个M文件下是因为我要调用的函数是我一段很长的代码运行后生成的 在用一个M文件里调用的话我要方便写
发表于 2009-5-7 17:17 | 显示全部楼层
我这里没有错啊。。。函数的文件名是不是“s.m”,不是的话,改一下再试试。。
不好意思,还是没弄明白非要在同一个文件下的意思,如果非要在同一个文件下的话,可以不用建立函数,直接用F。。。
其实在另一个M文件里照样可以编写调用F啊。。。
 楼主| 发表于 2009-5-7 23:06 | 显示全部楼层
函数的文件名是‘s.m’呀。下午应为时间的原因,我没有自己检查一下。明天仔细运行一下在看看。呵呵!在另外一个M文件里怎么调用Function 里面的呀?还请指点!
发表于 2009-5-7 23:27 | 显示全部楼层

难道楼主要的是subfunction吗?
doc subfunctions
下面是matlab帮助文件内的例子
function [avg, med] = newstats(u) % Primary function
% NEWSTATS Find mean and median with internal functions.
n = length(u);
avg = mean(u, n);
med = median(u, n);
function a = mean(v, n)            % Subfunction
% Calculate average.
a = sum(v)/n;
function m = median(v, n)          % Subfunction
% Calculate median.
w = sort(v);
if rem(n, 2) == 1
   m = w((n+1) / 2);
else
   m = (w(n/2) + w(n/2+1)) / 2;
end

[ 本帖最后由 ChaChing 于 2009-5-8 15:49 编辑 ]
 楼主| 发表于 2009-5-8 11:01 | 显示全部楼层
非常感谢楼上的帮助!!O(∩_∩)O~:@) 上面的代码虽说不是我想要的,可是我仍是多学习了一个东西。谢谢啦!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-6 07:08 , Processed in 0.070410 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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