I already have a script, which uses lsqcurvefit, but the fit is really bad and depend strongly on initial values. In my opinion i would Need more data Points. Is there a way to predict the number of data Points you Need to solve this Problem? (sorry for this novice Question, but it is the first time i use Matlab in this way.)
MATLAB: Is it possible to fit 30 data points to a differential equation system of 5 equation to determine 13 unkown constants? (for instance with lsqcurvefit)
lsqcurvefitnon linear fittingoptimization
Related Solutions
Basic calc? I hope this is not homework. But at least you made some effort.
You have formulated the problem as
q = int( int( a*x^2 + b*y^2,0,2*x*k), 0,5)
Where a, b, q are all known. The problem is, you want to solve for k, where k is part of that upper limit on y. We can do this on paper, at last most of it, but easy enough to do entirely in MATLAB too.
syms x y kq = 125;a = 0.5;b = 0.1;
The symbolic toolbox is smart enough to recognize the decimal values 0.5 and 0.1 as their true fractional equivalents.
We can do the inner integral on y easily enough.
int(a*x^2 + b*y^2,y,0,2*x*k)ans =(k*x^3*(4*k^2 + 15))/15
So we should see the double integral is simple too.
dubint = int(int(a*x^2 + b*y^2,y,0,2*x*k),x,0,5)dubint =(125*k*(4*k^2 + 15))/12
What we see is a cubic polynomial in k.
solve(dubint == 125,'maxdegree',3)ans = (269^(1/2)/8 + 3/2)^(1/3) - 5/(4*(269^(1/2)/8 + 3/2)^(1/3)) 5/(8*(269^(1/2)/8 + 3/2)^(1/3)) - (3^(1/2)*(5/(4*(269^(1/2)/8 + 3/2)^(1/3)) + (269^(1/2)/8 + 3/2)^(1/3))*1i)/2 - (269^(1/2)/8 + 3/2)^(1/3)/2 (3^(1/2)*(5/(4*(269^(1/2)/8 + 3/2)^(1/3)) + (269^(1/2)/8 + 3/2)^(1/3))*1i)/2 + 5/(8*(269^(1/2)/8 + 3/2)^(1/3)) - (269^(1/2)/8 + 3/2)^(1/3)/2
Kind of a symbolic mess. But vpa can reduce it simply.
vpa(ans)ans = 0.70611518025253139152901981827648 - 0.35305759012626569576450990913824 - 2.0307508428749447828026672218255i - 0.35305759012626569576450990913824 + 2.0307508428749447828026672218255i
Now, could I have done that on paper? Yes, except for the last part, where I'd probably have thrown the cubic polynomial into roots to solve.
expand(dubint)ans =(125*k^3)/3 + (625*k)/4>> roots([125/3 0 625/4 -125])ans = -0.353057590126266 + 2.03075084287495i -0.353057590126266 - 2.03075084287495i 0.706115180252531 + 0i
Could you have done it without using the symbolic toolbox? Yes. It is a bit easier to do the integration symbolically, and I am a bit lazy. I'd certainly have done the integrations on paper as calc 101.
Verification step:
k = 0.706115180252531;ulimy = @(x) 2*x*k;integral2(@(x,y) a*x.^2 + b*y.^2,0,5,0,ulimy)ans = 125.000000000043
Ok. Could I have solved it using fzero and integral2? Do I really need to? Sigh.
k = fzero(@(k) integral2(@(x,y) a*x.^2 + b*y.^2,0,5,0,@(x) 2*x*k) - 125,[0.1,5])k = 0.706115180252333
It seems to have worked this way too. I suppose if the integrand were more complicated, you would have had no choice in the matter.
In the corresponding Make file for Windows the mex arguments contain "-output" instead of "-o", so I assume replacing "-o" by "-output" solves the problem.
Best Answer