How do is code this last summation? I was able to do the first one but have no clue how to finish it?

1 次查看(过去 30 天)
Matlab question.GIF
function Senior_Project_code
%input values
y = 4;
n = 1;
L = 3;
%equations
%z=17;
a=L/(2*n);
x = 0:1:L;
E = 808/(y^2);
%c = atan(abs((x-a(2*i-1)))/y)*(180/3.14);
%s = (-0.0000000667*atan(abs((x-a(2*i-1)))/y)*(180/3.14).^4 ...
% + 0.0000157209*atan(abs((x-a(2*i-1)))/y)*(180/3.14).^3 ...
% - 0.0010081511*atan(abs((x-a(2*i-1)))/y)*(180/3.14).^2 ...
% + 0.0020817855*atan(abs((x-a(2*i-1)))/y)*(180/3.14) ...
% + 0.9991821678);
Axx(x+1) = 0;
for k = 1:n
Axx(x+1) = Axx(x+1) + E* ...
(-0.0000000667*(atan(abs((x-a*(2*k-1)))/y)*(180/3.14)).^4 ...
+ 0.0000157209*(atan(abs((x-a*(2*k-1)))/y)*(180/3.14)).^3 ...
- 0.0010081511*(atan(abs((x-a*(2*k-1)))/y)*(180/3.14)).^2 ...
+ 0.0020817855*(atan(abs((x-a*(2*k-1)))/y)*(180/3.14)) ...
+ 0.9991821678);
end
Ax = sum(Axx)/(L+1); %can I redo this to match my other equation?
display (Axx,'Brightness Values');
display (Ax,'Average Brightness');
end
Any help redoing Ax to match my above summation with i=1, to z-2... would be much appreciated.
Coding should be in for,if, then, and, or....type statements if possible.
  4 个评论
Adam Schlei
Adam Schlei 2019-3-23
Yes that is correct. I'm trying to code my MathCad formulas from the picture above. The problem I'm having is non-integer values. What I have in the picture is correct. The coding in Matlab is the problem I'm having. When I have non integer values I get array size errors. Is their ways around this, cause I originally had x = 0 : 0.1 : L so their were more test points being used, but the array sizes don't match then. And yes I do agree with all of what you saying (efficincy and rcalculating of atan four times), I'm not great at coding and any help for matching my MathCad program shown in the picture to the Matlab code would be great. Thanks a bunch.
Adam Schlei
Adam Schlei 2019-3-23
In other words I need the matlab equation of Ax, to be this summation equation with z=17:Matlab question3.GIF
or if not possible I need the matlab equation of Ax, to be this summation equation with z=17:
Matlab question4.GIF
Any help would be great!!

请先登录,再进行评论。

采纳的回答

darova
darova 2019-3-23
Maybe a little bit clearer version:
y= 7.5, n=16, L=16 result: 118.22
y= 4, n=1, L=3 result: 46.31
function main
% input values
y = 4;
L = 3;
z = 17;
n = 1;
av = 0;
for i = 1:z-2
x = L/(z-1)*i;
av = av + s(x,y,n,L);
end
x = L/(2*z-2)*i;
av = av + s(x,y,n,L) + s(L-x,y,n,L);
av = av/z;
display('Average Brightness: '), av
end
function result = s(x,y,n,L)
% equations
E = 808.01/y^2.008;
a = L/(2*n);
c = @(i) atand( abs(x-a*[2*i-1])/y );
coeff = [
-0.0000000667
0.0000157209
-0.0010081511
0.0020817855
0.9991821678];
S = 0;
for i = 1:n
for j = 1:5
S = S + coeff(j)*c(i)^(5-j);
end
end
result = E*S;
end

更多回答(1 个)

Walter Roberson
Walter Roberson 2019-3-23
%input values
y = 4;
n = 1;
L = 3;
z = 17;
%equations
c = @(x, y, n, l, i) atand(abs((x-l./(2.*n).*(2*i-1)))./y);
p = @(X) -0.0000000667*X.^4 + 0.0000157209*X.^3 - 0.0010081511*X.^2 + 0.0020817855*X + 0.9991821678;
s = @(x, y, n, l, c) sum(p(c(x(:), y, n, l, 1:n)),2);
zs = @(z, y, n, l, c) sum( s(l./(z-1).*(1:z-2), y, n, l, c), 1);
result = @(z, y, n, l, c) (zs(z, y, n, l, c) + s(l./(2*z-2), y, n, l, c) + s(l - l./(2*z-2), y, n, l, c)) ./ z;
result(z, y, n, L, c)
However the result is nowhere near 111
  3 个评论
Walter Roberson
Walter Roberson 2019-3-23
p = @(TEMPORARY_VARIABLE) -0.0000000667*TEMPORARY_VARIABLE.^4 + 0.0000157209*TEMPORARY_VARIABLE.^3 - 0.0010081511*TEMPORARY_VARIABLE.^2 + 0.0020817855*TEMPORARY_VARIABLE + 0.9991821678;
not sure why you say L=3 then use a lower case l in your equation. Doesn't this screw things up?
No. You need to learn about dummy parameters. For example
s = @(x, y, n, l, c) sum(p(c(x(:), y, n, l, 1:n)),2);
means the same thing as
s = @temporary_function_s;
function result = temporary_function_s(x, y, n, l, c)
p = evalin('caller', 'p');
result = sum(p(c(x(:), y, n, l, 1:n)),2);
end
which in turn means the same as
s = @temporary_function_s;
function result = temporary_function_s(First_Parameter, Second_Parameter, Third_Parameter, Fourth_Parameter, Fifth_Parameter)
p = evalin('caller', 'p');
result = sum(p(Fifth_Parameter(First_Parameter(:), Second_Parameter, Third_Parameter, Fourth_Parameter, 1:Third_Parameter)),2);
end
... almost. With some small details about exactly when p is imported into the function.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by