how to find almost equal entries in 2 row vectors?
조회 수: 2 (최근 30일)
이전 댓글 표시
delta =
Columns 1 through 7
-5.0000 -4.5000 -4.0000 -3.5000 -3.0000 -2.5000 -2.0000
Columns 8 through 14
-1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000
Columns 15 through 21
2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000
p42 =
Columns 1 through 7
74.9106 72.4174 69.9589 67.5351 65.1461 62.7918 61.7295
Columns 8 through 14
59.6842 57.6910 55.7487 53.8564 52.0129 50.2170 48.4677
Columns 15 through 21
46.7635 45.1032 43.4854 41.9085 40.3710 38.8713 37.4077
p43 =
Columns 1 through 7
31.9658 33.2883 34.6411 36.0260 37.4448 38.8993 40.3911
Columns 8 through 14
41.9217 43.4927 45.1054 46.7612 48.4613 50.2070 51.9995
Columns 15 through 21
53.8397 55.7288 57.6678 59.6575 60.7376 63.0215 65.3396
p42 and p43 are calculated from delta.. i need to find that value of delta for which p42 and p43 are exactly or almost equal i need a way to find (by interpolating) the almost exact value which these two vectors have in common. i suppose i could use polyfit to get two polynomials that fit these vectors but i dont know how to use polyfit in this case since that needs two data vectors. and even if i could use polyfit i have no idea where to go from there. help
댓글 수: 2
채택된 답변
dpb
2013년 10월 19일
Just one line for brevity, same works for entire altho size of outputs grows. Might want to select overlapping subsections via min/max of the two vectors combined to limit the problem space if the vectors are large...
>> p42=[46.7635 45.1032 43.4854 41.9085 40.3710 38.8713 37.4077];
>> p43=[41.9217 43.4927 45.1054 46.7612 48.4613 50.2070 51.9995];
>> [k,d]=dsearchn(p42',p43');
>> [md,ix]=min(d);
>> [p42(k(ix)) p43(ix) md]
ans =
45.1032 45.1054 0.0022
>>
댓글 수: 6
dpb
2013년 10월 19일
편집: dpb
2013년 10월 19일
The general idea is --
Write a function (m-file) that describes the problem--
function F = myfun(x)
F = P42func(x)-P43func(x);
Save this function file as myfun.m somewhere on your MATLAB path.
Next, set up an initial point and options and call fsolve:
x0 = 0; % Make a starting guess at the solution
options = optimset('Display','off'); % Turn off display
[x,Fval,exitflag] = fsolve(@myfun,x0,options);
More details, see
doc fsolve
추가 답변 (1개)
dpb
2013년 10월 19일
Oh, that's a different problem than I thought you meant--
>> interp1([p42-p43]',delta',0)
ans =
1.0014
>>
Or, use fsolve and the generator to solve directly
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!