필터 지우기
필터 지우기

Double "for loop" with an integral of hundle functions, problem.

조회 수: 1 (최근 30일)
Kraka Doros
Kraka Doros 2022년 6월 15일
댓글: Kraka Doros 2022년 6월 18일
>> %assing two handle functions to a column with two rows
f1=@(t)3*t+1;
f2=@(t)1.5*t+0.5;
fcell=cell(2,1);
fcell{1}=f1;
fcell{2}=f2;
>> % gives me a 2x1 cell array, with @(t)3*t+1 in the first row
>> % and @(t)1.5*t+0.5 in the second row.
>> % I will use this cell array in a double "for loop" to produce something
>> C=sym(zeros(2,1));
for kk=1:2
for jj=1:2
C(kk)=C(kk)+integral(@(t)fcell{kk}(t),0,1);
end
end
>> % This, gives me 2 resaults, in a 2x1 sym. The first resault is :
>> C(1)
ans =
5
>> % and the second is :
>> C(2)
ans =
5/2
>> % My problem is that, actually, i have more than 10 handle functions (lets say 10), and
>> % i do not want to write each one, every time. I want to copy them (from another software) and
>> % past in an array (in Matlab). And then, use this array as a source to call these 10 functions in the
>> % double "for loop".
>> % But i cannot make an array of 10 cells, including the 10 hundle functions. They comes
>> % out as "sym". And this, couse problem when i use it in the double "for loop". It gives me
>> % errors like : ........The following error occurred converting from sym to double:
% Error using symengine (line 59)
% DOUBLE cannot convert the input expression into a double array.
% If the input expression contains a symbolic variable, use VPA.
% Any help please

채택된 답변

Torsten
Torsten 2022년 6월 15일
f=@(t)[-7*t+25 %insert (by copy and paste), in the [ ], 10 functions. (Copy %from another software)
140*t+-122
107*t+-56
385*t+-890
-546*t+2834
-72*t+464
-16*t+128
440*t+-3064
-256*t+2504
-142*t+1478
];
result = integral(f,0,1,'ArrayValued',1);
C=zeros(2,1);
for kk=1:2
for jj=1:2
C(kk)=C(kk)+result(kk);
end
end
C
C = 2×1
43.0000 -104.0000
  댓글 수: 4
Torsten
Torsten 2022년 6월 18일
편집: Torsten 2022년 6월 18일
f={@(t)-7*t+25 %insert (by copy and paste), in the [ ], 10 functions. (Copy %from another software)
@(t)140*t-122
@(t)107*t-56
@(t)385*t-890
@(t)-546*t+2834
@(t)-72*t+464
@(t)-16*t+128
@(t)440*t-3064
@(t)-256*t+2504
@(t)-142*t+1478
};
d = size(f,1);
lb = (0:d-1).'/d;
ub = (1:d).'/d;
ArrayOf_Int = zeros(d,1);
for i = 1:d
ArrayOf_Int(i) = integral(f{i},lb(i),ub(i));
end
C = 1.0;
jjfirst = 1;
jjlast = d;
expression = C*(4^(jjlast+1)-4^jjfirst)/3*sum(ArrayOf_Int)
expression = 4.4249e+08

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Assumptions에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by