首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在TinyGP中包含非线性函数?

如何在TinyGP中包含非线性函数?
EN

Stack Overflow用户
提问于 2015-12-04 07:42:42
回答 1查看 78关注 0票数 0

我正在尝试扩展TinyGP软件的函数集,以包括非线性函数,如sin、cos和tan。问题是,树的打印是通过递归完成的,打印一个个体,然后打印函数(+,-,*,/),然后打印另一个个体。因此,结果类似于(X2 * 2.365789)。但是,sin只有一个参数sin(x)。如何更新打印方法?

打印方法的源代码概述如下。

代码语言:javascript
运行
复制
int print_indiv( char []buffer, int buffercounter ) {
int a1=0, a2;
if ( buffer[buffercounter] < FSET_START ) {
  if ( buffer[buffercounter] < varnumber )
    System.out.print( "X"+ (buffer[buffercounter] + 1 )+ " ");
  else
    System.out.print( x[buffer[buffercounter]]);
  return( ++buffercounter );
  }
switch(buffer[buffercounter]) {
  case ADD: System.out.print( "(");
    a1=print_indiv( buffer, ++buffercounter ); 
    System.out.print( " + "); 
    break;
  case SUB: System.out.print( "(");
    a1=print_indiv( buffer, ++buffercounter ); 
    System.out.print( " - "); 
    break;
  case MUL: System.out.print( "(");
    a1=print_indiv( buffer, ++buffercounter ); 
    System.out.print( " * "); 
    break;
  case DIV: System.out.print( "(");
    a1=print_indiv( buffer, ++buffercounter ); 
    System.out.print( " / "); 
    break;
  }
a2=print_indiv( buffer, a1 ); 
System.out.print( ")"); 
return( a2);}

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2015-12-18 06:01:32

没有经过测试,但下面的代码应该可以工作:

代码语言:javascript
运行
复制
/* ... */
switch(buffer[buffercounter]) {
  /* .... */
  case SIN: System.out.print( "sin(");
    a1= ++buffercounter;
    break;
  /* ... */
  }

a2=print_indiv( buffer, a1 ); 
System.out.print( ")"); 
return( a2);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34078416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档