How to solve non-linear mathematical equation in matlab? [closed] - matlab

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I've two equations as:
x = c1 - y;
y = c2*c3*x / (1+c3*x);
where c1, c2 and c3 are constants. How to solve these equations in MATLAB? Please help.

Since I'm in a good mood this morning:
x = c1 - y;
y = c2*c3*x / (1+c3*x);
Now, pen and paper:
y = c1 - x
c1 - x = c2*c3*x / (1 + c3*x)
(c1 - x) * (1 + c3*x) = (c2 * c3 * x)
(c1 - x) * (1 + c3*x) - c2*c3*x = 0
You should be able to use fzero or roots to solve this by yourself.

Related

MATLAB Trigonometry Find Field [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 5 years ago.
Improve this question
I have this trigonometric equation;
cos(2*pi*50*t)+cos(2*pi*100*t)
I want to graphic of equation and I want to find field for a period. How can I do?
Graph:
>> f = #(t) cos(2*pi*50*t) + cos(2*pi*100*t);
>> x = linspace(0, 1/50, 100);
>> y = f(x);
>> plot(x,y)
Area over 1 period:
>> integral(f, 0, 1/50)
or just do it manually:
∫ ( cos(2π·50t) + cos(2π·100t) ) dt =
-1/2π·( 1/50·sin(2π·50t) + 1/100·sin(2π·100t) )
which, evaluated between 0 and 1/50, equals 0.

How to get symbolic partial derivative with respect to time [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
Let's say I have this function
f(t) = 4*sin(a(t)) + x(t)*y(t) + h + cos(y(t))*sin(x(t))
How would I compute its derivative with respect to time?
You need to declare the variables and the functions inside it as being symbolic and then use diff:
clear
clc
syms a x y t h
a(t) = symfun(sym('a(t)'), t)
x(t) = symfun(sym('x(t)'), t)
y(t) = symfun(sym('y(t)'), t)
F = 4*sin(a(t)) + x(t)*y(t) + h + cos(y(t))*sin(x(t))
DerF_t = diff(F,t)
Giving the following (messy) output:
F = h + 4*sin(a(t)) + cos(y(t))*sin(x(t)) + x(t)*y(t)
DerF_t = x(t)*diff(y(t), t) + y(t)*diff(x(t), t) + 4*cos(a(t))*diff(a(t), t) + cos(x(t))*cos(y(t))*diff(x(t), t) - sin(x(t))*sin(y(t))*diff(y(t), t)
Note that since a(t),x(t) and y(t) are simply defined as functions of 't' we are stuck with their 'symbolic' derivative (I don't know the term for that sorry)...i.e. diff(a(t)) for instance.
Hope it's what you were after!

Solve two equations with two unknowns parameters [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn't work, and the expected results. See also: Stack Overflow question checklist
Closed 9 years ago.
Improve this question
I have these two equations and I want to find the values of these two parameters:
9.393e(16) = ((N*K)/(K + 0.0045))*(1 - exp (-(K + 0.0045)*120))
1.376e (17) = ((N*K)/(K + 0.0045))*(1 - exp (-(K + 0.0045)*240))
How can I solve it in matlab or wolfram please
I guess a hand calculator is sufficient for that.
Call:
a = 9.393e(16)
b = 1.376e (17)
Q = (N*K)/(K + 0.0045)
f = exp (-(K + 0.0045)*120) => exp (-(K + 0.0045)*240) = f^2
You have:
a = Q (1 - f)
b = Q (1 - f^2)
so
a/b = (1 - f) / (1 - f^2) = 1 / (1 + f)
thus
f = b/a - 1
You can take the log at both sides and solve for K.
-(K + 0.0045)*120 = log(b/a - 1)
To find N the equation is again just linear.
You can solve simultaneous non-linear equations in MATLAB via FSOLVE or LSQNONLIN. However, this requires the Optimization Toolbox.
See this MathWorks knowledgebase article.
Given the magnitude of the LHS of your equations, I would not be surprised if you see some numerical instability. You might want to do this problem by hand as suggested by Acorbe.

matlab: To find the multiplier which reduces the standard deviation between two series [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn't work, and the expected results. See also: Stack Overflow question checklist
Closed 9 years ago.
Improve this question
i want to find the value of C such that standard deviation of A-B*C is minimum using matlab (A & B are vectors) where as C would be a scalar. Any ideas ?
This isn't a programming problem, it's a math problem. You want to find c such that
Var(A - c * B)
is minimized. But
Var(A - c*B) = Var(A) - 2 * c * Cov(A,B) + c^2 * Var(B)
Differentiating and setting to zero
-2 * Cov(A,B) + 2 * c * Var(B) = 0
which implies
c = Cov(A,B) / Var(B)
You can achieve this in Matlab with
M = cov(A, B); # Now M = [varA, covAB; covAB, varB]
covAB = M(1,2);
varB = M(2,2);
c = covAB / varB;
Following #EitanT's advice, try:
Ctry = 1.5; % define trial parameter first
Copt = fminsearch(#(x) sum((A-B*x).^2),Ctry)
edit
Note that in the above I assumed you wanted to minimize the vector norm, but following commentaries it is evident that you want to minimize the std dev of samples in array (A-B*x), in which case try
Ctry = 1.5; % define trial parameter first
Copt = fminsearch(#(x) var(A-B*x),Ctry)
If you are performing columnwise substraction of vector B from A, you can do as follows:
A=rand(900,100); B=randn(900,1); % example
Ctry = 1.5; % define parameter first
B = repmat(B,size(A,2),1);
Copt = fminsearch(#(x) var(A(:)-B*x),Ctry)
Eopt=var(A(:)-B*Copt)
#Luis Mendo suggests
nA = numel(A);
Copt = fminsearch(#(x) sum((A(:)-B*x).^2)-sum(A(:)-B*x)^2/nA,Ctry)
This is a little faster on my system.
Also, as with all minimization problems, it helps if you have a good starting estimate.
Edit
It's worth noting that the two methods find points that differ in the second significant figure, which raises the question which is more accurate. <-- just an issue that can be fixed with optimset

Unvectorize This Matlab [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn't work, and the expected results. See also: Stack Overflow question checklist
Closed 9 years ago.
Improve this question
I have a MALTAB function:
find(x > [x(1)-1;x(1:n-1)] & x > [x(2:n);x(n)-1]);
How can I unvectorize this? I am not quite sure what it is even testing for!
Ideas?
Something like this:
result = []
for i = 1:n
if i == 1 % special case, since x(-1) does not exist
x_below = x(1) - 1;
else
x_below = x(i - 1);
end
if i == n % special case, since x(n + 1) does not exist
x_above = x(n) - 1;
else
x_above = x(i + 1);
end
if x(i) > x_below && x(i) > x_above
result = [result, i]; %add found index to result
end
end
So as Eric mentioned, it returns the index of all elements in x that are larger then their neighbors. For x(1), a 'fake' lower neighbor of x(1) - 1 is made, so that x(1) is always larger. Index 1 is thus returned if x(1) > x(2). A similar trick is done for x(n).