声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4890|回复: 7

[求助]两个M文件之间如何调用函数啊?

[复制链接]
发表于 2006-6-1 13:11 | 显示全部楼层 |阅读模式

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

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

x
请看下面的牛顿插值的例子<br>function [p,q]=chashang(x,y)<br>n=length(x);<br>x=reshape(x,n,1);<br>p(:,1)=x;<br>p(:,2)=reshape(y,n,1);<br>for j=3:n+1<br>    p(1:n+2-j,j)=diff(p(1:n+3-j,j-1)) ./ (x(j-1:n)-x(1:n+2-j));<br>end<br>q=p(1,2:n+1)';<br>function yh=newton(x,y,xh) <br>[p,q]=chashang(x,y); <br>n=length(x); <br>m=length(xh); <br>x=reshape(x,1,n);<br>xh=reshape(xh,m,1);<br>xh=xh*ones(1,n) - ones(m,1)*x; <br>xh=xh'; <br>yh=y(1)*ones(1,m); <br>for i=2 : n <br>    yh=yh + q(i)*prod(xh(1:i-1,:),1); <br>end <br>yh<br><br>老是提示没有定义newton函数,为什么??
[此贴子已经被cdwxg于2006-6-1 13:26:48编辑过]

回复
分享到:

使用道具 举报

发表于 2006-6-1 15:17 | 显示全部楼层

回复:(wishandlee)[求助]两个M文件之间如何调用函数...

matlab中第一个出现的函数为主函数,其它函数为子函数,外部程序只能对主函数进行调用,程序中chashang为主函数,所以提示没定义,你把两个函数的位置换一下,可能就行了。
[此贴子已经被cdwxg于2006-6-1 15:33:54编辑过]

发表于 2006-6-1 15:36 | 显示全部楼层
function yh=newton(x,y,xh) <BR>[p,q]=chashang(x,y); <BR>n=length(x); <BR>m=length(xh); <BR>x=reshape(x,1,n);<BR>xh=reshape(xh,m,1);<BR>xh=xh*ones(1,n) - ones(m,1)*x; <BR>xh=xh'; <BR>yh=y(1)*ones(1,m); <BR>for i=2 : n <BR>    yh=yh + q(i)*prod(xh(1:i-1,:),1); <BR>end <BR>function [p,q]=chashang(x,y)<BR>n=length(x);<BR>x=reshape(x,n,1);<BR>p(:,1)=x;<BR>p(:,2)=reshape(y,n,1);<BR>for j=3:n+1<BR>    p(1:n+2-j,j)=diff(p(1:n+3-j,j-1)) ./ (x(j-1:n)-x(1:n+2-j));<BR>end<BR>q=p(1,2:n+1)';<BR><BR>二楼说的不错哈。你看下是否是你要的结果呢?不是的话再说是什么问题。
 楼主| 发表于 2006-6-2 20:58 | 显示全部楼层
<P>我那样试了,系统提示:??? Undefined command/function 'newton'.<BR></P>[em06]
发表于 2006-6-3 00:08 | 显示全部楼层
是不是你的matlab版本问题啊?<BR>我怎么是可以的呢?
 楼主| 发表于 2006-6-8 17:23 | 显示全部楼层
<P>我的是Matlab 7.0.1的,够新吧</P>
发表于 2006-6-8 18:29 | 显示全部楼层
两个M程序的调用,总要有一个被另一个调用。你的两个程序,到底谁调用谁?<BR>=================================================<BR>随手写一个,里面的语句有几个其实没有必要,是为了显示一下参数传递的过程而设: <BR>function private_call <BR>v=sub_first; <BR>d=sub_second; <BR>plot(v,d,'b+') <BR><BR>function v_pass=sub_first <BR>global v_pass <BR>v_pass=linspace(0,5,100); <BR><BR>function d=sub_second <BR>global v_pass <BR>d=v_pass.^3; <BR>主函数是第一个,下面两个是子函数,参数传递我是用全局变量在两个子函数之间传递的,同样主、子函数之间也可以,但大的程序我选择用结构数组和varargin和varargout做成cell传递,上面所有的放在一个M文件里. <BR>
发表于 2006-6-11 09:54 | 显示全部楼层
Error in ==&gt; D:\ProgramFiles\work\newton.m<BR>On line 4  ==&gt; [p,q]=chashang(x,y); <BR>什么原因:我的是6.5的<BR>
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-20 07:27 , Processed in 0.053335 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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