how to round a rational number based on a given difference range

1 回表示 (過去 30 日間)
AbuYusuf
AbuYusuf 2017 年 11 月 22 日
Hi,
I am taking two inputs from a user, VCR and x_diff. VCR can be integer or decimal, I used format rat to change it to Num/Den format. Then, this will be used later for other codes. My issue now, I want to round these Num and Den values based on a given acceptable difference range (x_diff), so for example VCR=0.76 and x_diff=0.02 would result in assiging VCR=0.75 which is 3/4 instead of 19/25 (0.76) The minimum Num and Den values the better for my problem. Another example, VCR=0.1 and using x_diff=0.1, the assigned new VCR is 0.2 which is 1/5 instead of 1/10 previously.
I have developed the code as following:
function [VCR_new]= Rat_test(VCR, x_diff)
% VCR= Gain, x_diff is acceptable difference
F=[1 1 2 3 5 8 13 21 34 55 89 144]; % Fibonnacci series
format rat % change VCR to rational VCR=Num/Den
for m=1:size(VCR,2);
[Num(m), Den(m)] = numden(sym(VCR(m))); % Num of simplest form of VCR
i=1; j=1; % initialization
if x_diff~= 0
while F(i)< Den(m) % to make sure assigned new number does not exceeding the Den(m)
Den_new = i;
for j=1: Den(m)
VCRx_New = j/i;
if abs(VCRx_New- Num(m)/Den(m)) <= x_diff
Num(m)= j; Den(m)=i;
x_diff = 0;
else
end
end
i=i+1;
end
else
end
VCR_new (m)= Num(m)/Den(m);
end
My concern: Is there any way to minimize/optimize this code?
Thanks

回答 (0 件)

カテゴリ

Help Center および File ExchangeElementary Math についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by