jiggzson / nerdamer

a symbolic math expression evaluator for javascript
http://www.nerdamer.com
MIT License
514 stars 82 forks source link

vector addition with an unknown variable #666

Open gunnarmein-ts opened 2 years ago

gunnarmein-ts commented 2 years ago

nerdamer("a+vector(1,2,3)").toString() ---> '[1+a,2+a,3+a]'

Makes no sense at all. It could be [1+vecget(a,0), 2+vecget(a,1), 3+vecget(a,2)], or it could leave it unresolved. But this?

jiggzson commented 2 years ago

Makes no sense at all. It could be [1+vecget(a,0), 2+vecget(a,1), 3+vecget(a,2)], or it could leave it unresolved. But this?

Not really. It's pretty standard behavior actually.

Maxima:

(%i1)   a+[1,2,3];
(%o1)   [a+1,a+2,a+3]

Wolfram Alpha: https://www.wolframalpha.com/input?i=a%2B%7B1%2C2%2C3%7D

One possible solution might be to set a flag to change this behavior.

gunnarmein-ts commented 2 years ago

What you put into WolframAlpha there is a+ the set {1,2,3}. Adding "a" to a vector in the way you do makes no sense:

if a is a scalar, then the addition is undefined if a is a vector, then it needs to be added component by component

What could a be that [a+1, a+2, a+3] would be the result? Nothing.

The issue is complicated here because you don't really distinguish between vectors and sets in Nerdamer. Your docs say "vector(1,2,3)" to specify a vector, the result is "[1,2,3]". But the solution to "x^2=1" is similarly written as "[-1,1]".

jiggzson commented 2 years ago

@gunnarmein-ts,

Feel free to insert a+[1,23] or a+(1,2,3). The result will be the same. As I mentioned before, the main discussion should be on how to proceed from here.

gunnarmein-ts commented 2 years ago

Hmm. How to proceed should be to allow vectors in symbolic computation, no?

`nerdamer("solve([a+2,1=[4,1],a)").toString()`

should work as easily as

`nerdamer("solve(a+2=4,a)").toString()`

and (reaching here):

`nerdamer("solve(a+vector(1,2,3)=vector(2,3,4),a)")`

should figure out that a=[1,1,1]

But I also still think to put this on some solid foundation you need to answer the question from above:

What could a be that [a+1, a+2, a+3] would be the result?

What do you think a is?

jiggzson commented 2 years ago

What could a be that [a+1, a+2, a+3] would be the result?

  • if a is a scalar, then the addition is undefined
  • if a is a vector, then it needs to be added component by component

What do you think a is?

@gunnarmein-ts, I get your point but unfortunately, that's the currently established behavior that others might currently be relying on. Additionally, I demonstrated that this behavior isn't uncommon, as both Maxima and Wolfram Alpha do the same. The way forward will probably have the be the use of some flag to disable this behavior using nerdamer.set