Using multiple functions in matlab Errors

Click For Summary
SUMMARY

The forum discussion addresses an error encountered in MATLAB when attempting to call multiple functions. The user defined three functions: Newtonphasemolefraction1, Newtonphasemolefraction2, and Newton1. The error message "Not enough input arguments" indicates that the function Newtonphasemolefraction1 is not receiving the required parameters. The user must ensure that all necessary arguments are passed correctly when calling these functions within Newton1.

PREREQUISITES
  • Understanding of MATLAB function syntax and argument passing
  • Familiarity with MATLAB error handling
  • Basic knowledge of numerical methods, specifically Newton's method
  • Experience with MATLAB data structures, particularly arrays
NEXT STEPS
  • Review MATLAB documentation on function argument passing
  • Learn about MATLAB error messages and debugging techniques
  • Study numerical methods, focusing on Newton's method for root finding
  • Explore MATLAB array manipulation and indexing
USEFUL FOR

This discussion is beneficial for MATLAB programmers, particularly those working on numerical methods and function development, as well as anyone troubleshooting function call errors in MATLAB.

adeeyo
Messages
20
Reaction score
0
Dear All,

Please I need your assistance in solving this MATLAB problem. I will be glad to hear from you as early as possible. Thanks for your anticipated help

I have three functions

First one


function f_PR_W=Newtonphasemolefraction1(W_PR, z,C,K_PR )
f_PR=0;
for c=1:C

f_PR_W=f_PR+z(c).*(1-K_PR(c))./(1+W_PR.*(K_PR(c)-1));
end


Another function


function fdot_PR_W=Newtonphasemolefraction2(W_PR, z,C,K_PR )
fdot_PR=0;

for c=1:C
fdot_PR_W=fdot_PR+z(c).*(K_PR(c)-1).^2/(W_PR.*(K_PR(c)-1)+1).^2;

end

The third function

function [W_PR,err,k,f_PR_W]=Newton1(Newtonphasemolefraction1,Newtonphasemolef raction2,W_PR,Tol_W_PR,Tol_f_PR,maxIter)


for k=1:maxIter
p1=W_PR-Newtonphasemolefraction1(W_PR)/Newtonphasemolefraction2(W_PR);
err=abs(p1-W_PR);
relerr=2*err/(abs(p1)+Tol_W_PR);
W_PR=p1;
f_PR_W=Newtonphasemolefraction1(W_PR);
if (err<Tol_W_PR)|(relerr<Tol_W_PR)|(abs(f_PR_W)<Tol_ f_PR),break,end
end


I call the three functions using

[W_PR,err,k,f_PR_W]=Newton1(Newtonphasemolefraction1,Newtonphasemolef raction2,W_PR,Tol_W_PR,Tol_f_PR,maxIter)

I received the following error

"Error using Newtonphasemolefraction1 (line 3)
Not enough input arguments."

And all input arguments were defined: K_PR=[0.01546,0.5,1.432],W_PR=0.25,Tol_W_PR=10^-6, Tol_f_PR=10^-10, maxIter=100, z=[0.1 0.3 0.6],C=3

Please assist.


adeeyo
 
Physics news on Phys.org
adeeyo said:
function f_PR_W=Newtonphasemolefraction1(W_PR, z,C,K_PR )
I call the three functions using
[W_PR,err,k,f_PR_W]=Newton1(Newtonphasemolefraction1, Newtonphasemolefraction2,W_PR,Tol_W_PR,Tol_f_PR,maxIter)

"Error using Newtonphasemolefraction1 (line 3)
Not enough input arguments."

I don't know Matlab, but in most computer languages your would have to write something like:

[W_PR,err,k,f_PR_W]=Newton1(Newtonphasemolefraction1(a,b,c,d),
Newtonphasemolefraction2(e,f,g,h),.. etc.

because you can't assume the compiler knows what arguments you want to pass to the functions Newtonphasemolefraction1 and Newtonphasemolefraction2 if you don't tell it. It looks like the compiler is objecting that you didn't supply any arguments to those functions.
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 9 ·
Replies
9
Views
2K
  • · Replies 8 ·
Replies
8
Views
3K