# How to solve a single nonlinear equation with parameter variations?

조회 수: 5(최근 30일)
Xhetri Sita 2021년 1월 30일
답변: VBBV 2021년 11월 7일
#Function file
function f=reso(A,w)
global taue k gamma hac;
f=(((taue+k.^2)-w.^2)*A+(9/2)*A.^3-(75/64)*A.^5).^2+(gamma*k*w*A).^2-hac.^2;
end
Script file
global taue k gamma hac;
taue=0.95;
L=5;
k=pi/(2*L);
hac=1.46;
gamma=0.95;
A0=0.001; %Initial guess
w=0:0.1:5;
for k= 1:length(w)
sol = fzero(@(A) reso(A,w(k)),A0);
plot(w,sol);
end
Here the for loop is not working. Could anybody please point out the problem. Thanks in advance

댓글을 달려면 로그인하십시오.

### 답변(2개)

KSSV 2021년 1월 30일
It is suggested not to use global.
Replace these lines:
w=0:0.1:5;
for k= 1:length(w)
sol = fzero(@(A) reso(A,w(k)),A0);
plot(w,sol);
end
with
w=0:0.1:5;
sol = zeros(size(w)) ;
for k= 1:length(w)
sol(k) = fzero(@(A) reso(A,w(k)),A0);
end
plot(w,sol)
##### 댓글 수: 0표시숨기기 이전 댓글 수: -1

댓글을 달려면 로그인하십시오.

VBBV 2021년 11월 7일
taue=0.95;
L=5;
kk=pi/(2*L); % change this to different variable
hac=1.46;
gamma=0.95;
A0=0.01; %Initial guess
w=0:0.1:5;
for k= 1:length(w)
sol = fzero(@(A) reso(A,w(k),gamma,taue,kk,hac),A0);
plot(w,sol,'bo');
hold on
end
function f=reso(A,w,gamma,taue,kk,hac)
f=(((taue+kk.^2)-w.^2)*A+(9/2)*A.^3-(75/64)*A.^5).^2+(gamma*kk*w*A).^2-hac.^2;
end
Alternately you can pass the variables as arguments in the function call.
You also seem to use the variable k both for parametric values and loop iterator, it essentially overides the value assigned to variables.

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by