I'm trying to have a function receive input in 2 different ways.
    조회 수: 8 (최근 30일)
  
       이전 댓글 표시
    
Hi I have a function that determines if 2 lines intersect, are parallel or have infinitely many solutions.  I'm able to prompt the user for inputs individually or have them enter the name of the function IPF(slope1,intercept1,slope2,intercept2).  If I edit the code I can have it work both ways.  However, my professor would like it if the user could decide how they would like to enter the function ( either on one line or being prompted by the function) I have used, if statements, while states, etc, however I have been unable to have a user choose how they want to enter the function without errors.  
Here's the current code
function[output]= IPF(m1,b1,m2,b2)
 prompt1='Enter your slope value for your first function.\n';
 prompt2='Enter your y-intercept value for your first function.\n';
     prompt3='Enter your slope value for your second function.\n';
    prompt4='Enter your y-intercept value for your second function.\n';
    if (isempty (m1))
    m1=input(prompt1);
    elseif (isempty(b1))
    b1 = input(prompt2);
    elseif (isempty(m2))
    m2 = input(prompt3);
    elseif (isempty(b2))
    b2 = input(prompt4);
    end
  infinite = 'These lines have infinitely many solutions.\n';
  parallel = 'These lines have no solutions and are parallel.\n';
  intersect = 'These lines intersect.\n';
  if(m1==m2)&&(b1==b2)
      fprintf (infinite)
      x=linspace(-10,10,21);
      plot(x,m1*x+b1,x,m2*x+b2)
  elseif(m1==m2)&&(b1~=b2)
      fprintf (parallel)
      x=linspace(-10,10,21);
      plot(x,m1*x+b1,x,m2*x+b2)
  elseif (m1~=m2)
      fprintf (intersect)
      x=linspace(-10,10,21);
      syms xi yi 
      eqn1 = m1*xi + b1 == yi;
      eqn2 = m2*xi +b2 == yi;
      sol = solve([eqn1, eqn2], [xi, yi]);
      xSol = sol.xi;
      ySol = sol.yi;
     fprintf('The lines intersect at %d , %d.\n',xSol,ySol);
     plot(x,m1*x+b1,'r',x,m2*x+b2,'b--', xSol,ySol,'*g')
  end
end
This code displays the results like this:

However, I would like the user to choose between entering the function like above or as shown in the picture below.  

I can get each of these to work separately but I'm having no success getting both to work within the same function. I hope that I explained it clearly enough.    
I would greatly appreciate any assistance or clarification on this issue.  
댓글 수: 0
채택된 답변
  Deepak Gupta
      
 2021년 10월 27일
        You can use varargin as the input to your function definition i.e.
function[output]= IPF(varargin)
if(nargin ==0)
    prompt1='Enter your slope value for your first function.\n';
    prompt2='Enter your y-intercept value for your first function.\n';
    prompt3='Enter your slope value for your second function.\n';
    prompt4='Enter your y-intercept value for your second function.\n';
    m1=input(prompt1);
    m2=input(prompt2);
    m3=input(prompt3);
    m4=input(prompt4);
elseif(nargin ==4)
    m1=varargin{1};
    m2=varargin{2};
    m3=varargin{3};
    m4=varargin{4};
end
%Rest of your code
end
You can have conditions for cases when user inputs only 1 or 2 or 3 inputs as well.
댓글 수: 5
  Stephen23
      
      
 2021년 10월 28일
				" I tried this way and function works as expected but i wasn't able to see the tab completion for manually written function. Does it require a separate file to accomodate tab completion?"
No, the hinting/help is automatic, based on the function signature. First type the function name, then either:
- type the opening parenthesis, and then wait for a second or two, or
- type both opening and closing parentheses and press crtl+f1.
A small box will pop up with the input names and a link to the function help. When I tried it with your function it looks like this (here with individual named input arguments):

vs. when using VARARGIN for all of the input arguments:

I thought that this was also displayed during tab completion, but my memory was incorrect.
추가 답변 (0개)
참고 항목
카테고리
				Help Center 및 File Exchange에서 Entering Commands에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


