* Bug #7958 fixed - mrfit did not allow a fourth parameter as shown in the help page. 22/18622/4
Adeline CARNIS [Fri, 21 Oct 2016 14:03:06 +0000 (16:03 +0200)]
Change-Id: Ic29cfa442a25e222e08047ddc93f619091ec761a

scilab/CHANGES.md
scilab/modules/signal_processing/macros/mrfit.sci
scilab/modules/signal_processing/tests/nonreg_tests/bug_7958.dia.ref [new file with mode: 0644]
scilab/modules/signal_processing/tests/nonreg_tests/bug_7958.tst [new file with mode: 0644]

index 5e3bea3..2805f89 100644 (file)
@@ -316,6 +316,8 @@ Bug Fixes
 * [#7192](http://bugzilla.scilab.org/show_bug.cgi?id=7192): From S=[], S($+1,:) = some_row inserted it in row#2 after a parasitic row#1.
 * [#7649](http://bugzilla.scilab.org/show_bug.cgi?id=7649): `isempty` returned `%F` on `struct()`, `{}` or `list(,)` and was not shortcut
 * [#7696](http://bugzilla.scilab.org/show_bug.cgi?id=7696): The `parallel_run` help page was poorly formated
+* [#7794](http://bugzilla.scilab.org/show_bug.cgi?id=7794): Example of findABCD help page failed.
+* [#7958](http://bugzilla.scilab.org/show_bug.cgi?id=7958): `mrfit`did not allow a fourth parameter as shown in the help page.
 * [#8010](http://bugzilla.scilab.org/show_bug.cgi?id=8010): Permanent variables could be redefined through a syntax like `%i(1,1)=1`
 * [#8356](http://bugzilla.scilab.org/show_bug.cgi?id=8356): `sci2exp` applied to lists, tlists or mlists having undefined fields yielded an error or a wrong result.
 * [#8493](http://bugzilla.scilab.org/show_bug.cgi?id=8493): Some trivial simplifications of `p1./p2` with matrices of complex-encoded polynomials were not done.
index 97bc3c9..eebc839 100644 (file)
@@ -10,7 +10,7 @@
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [num,den]=mrfit(w,mod,r)
+function [num,den]=mrfit(w,mod,r,weight)
     //Syntax:
     //[num,den]=mrfit(w,mod,r)
     //sys = mrfit(w,mod,r)
@@ -33,7 +33,17 @@ function [num,den]=mrfit(w,mod,r)
     endfunction
 
     w=w(:);mod=mod(:);
-    [LHS,RHS]=argn(0);
+    [LHS, RHS]=argn(0);
+    if RHS < 4 then
+        weight=ones(length(w),1);
+    else
+        if ~iscolumn(weight) then
+            error(msprintf(_("%s: Argument #%d: Column expected.\n"), "mrfit", 4));
+        end
+        if size(weight, "*") <> size(w, "*") then
+            error(msprintf(_("%s: Arguments #%d and #%d: Same numbers of elements expected.\n"), "mrfit", 1, 4));
+        end
+    end
     if w(1)==0 then w(1)=%eps;end
 
     if r==0 then num=sum(mod)/size(mod,"*");den=1;return;end
@@ -47,7 +57,7 @@ function [num,den]=mrfit(w,mod,r)
     if slinf~=0 then mod($)=mod($-1)*10^slinf;end
     logw=log10(w);logmod=log10(mod);delw=mrfitdiff(logw);delmod=mrfitdiff(logmod);
 
-    weight=ones(length(w),1);
+    //weight=ones(length(w),1);
 
     junk=find(abs(mrfitdiff(delmod./delw)) > .6);
     if isempty(junk) then
diff --git a/scilab/modules/signal_processing/tests/nonreg_tests/bug_7958.dia.ref b/scilab/modules/signal_processing/tests/nonreg_tests/bug_7958.dia.ref
new file mode 100644 (file)
index 0000000..2d312d4
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//<-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 7958 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7958
+//
+// <-- Short Description -->
+//  mrfit did not allow a fourth parameter as shown in the help page.
+w=0.01:0.01:2;
+s=poly(0,"s");
+G=syslin("c",2*(s^2+0.1*s+2),(s^2+s+1)*(s^2+0.3*s+1)); // syslin('c',Num,Den);
+fresp=repfreq(G,w);
+mag=abs(fresp);
+Gid=mrfit(w,mag,4);
+Gidd = mrfit(w, mag, 4, ones(length(w), 1));
+assert_checkalmostequal(coeff(Gidd.num), coeff(Gid.num), 1e-14);
+assert_checkalmostequal(coeff(Gidd.den), coeff(Gid.den), 1e-14);
+// error
+assert_checkfalse(execstr("mrfit(w, mag, 4, 1)"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Arguments #%d and #%d: Same numbers of elements expected.\n"), "mrfit", 1, 4);
+assert_checkerror("mrfit(w, mag, 4, 1)", refMsg);
+assert_checkfalse(execstr("mrfit(w, mag, 4, ones(1, length(w)))"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Argument #%d: Column expected.\n"), "mrfit", 4);
+assert_checkerror("mrfit(w, mag, 4, ones(1, length(w)))", refMsg);
diff --git a/scilab/modules/signal_processing/tests/nonreg_tests/bug_7958.tst b/scilab/modules/signal_processing/tests/nonreg_tests/bug_7958.tst
new file mode 100644 (file)
index 0000000..7f63554
--- /dev/null
@@ -0,0 +1,36 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+//<-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 7958 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7958
+//
+// <-- Short Description -->
+//  mrfit did not allow a fourth parameter as shown in the help page.
+
+w=0.01:0.01:2;
+s=poly(0,"s");
+G=syslin("c",2*(s^2+0.1*s+2),(s^2+s+1)*(s^2+0.3*s+1)); // syslin('c',Num,Den);
+fresp=repfreq(G,w);
+mag=abs(fresp);
+Gid=mrfit(w,mag,4);
+Gidd = mrfit(w, mag, 4, ones(length(w), 1));
+assert_checkalmostequal(coeff(Gidd.num), coeff(Gid.num), 1e-14);
+assert_checkalmostequal(coeff(Gidd.den), coeff(Gid.den), 1e-14);
+
+// error
+assert_checkfalse(execstr("mrfit(w, mag, 4, 1)"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Arguments #%d and #%d: Same numbers of elements expected.\n"), "mrfit", 1, 4);
+assert_checkerror("mrfit(w, mag, 4, 1)", refMsg);
+
+assert_checkfalse(execstr("mrfit(w, mag, 4, ones(1, length(w)))"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Argument #%d: Column expected.\n"), "mrfit", 4);
+assert_checkerror("mrfit(w, mag, 4, ones(1, length(w)))", refMsg);
+
+