acer

32405 Reputation

29 Badges

19 years, 345 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are replies submitted by acer

@shoeless You can (as of some recent release, 2015?) utilize the command Units:-UseUnit to set the preferred unit for its corresponding dimension. So in this case Unit(cal/mol) for the dimension length^2*mass/(time^2*amount).

The upshot of that is that expression in terms of units having that dimension will simplify to that preferred unit.

In the case of your worksheet the answer you were looking for drops out right away.

Note that you had an earlier question about this kind of definite integral, which is handled badly in the purely symbolic case. And int doesn't know much about the nature of Unit things, ie. that they're not just symbols. In that earlier question the use of map did better.


restart

Units:-UseUnit(cal/mol):

T__sys := 64.47487*Unit('K'): 

NULL

Pure Component Parameters

 

NULL

REVIEW-1

 

Aspen Plus | Methods | Parameters | Pure Components

``

enam := "METHANE":

mwgh := 16.04276*Unit('g'/'mol'): 

DHFORM := -17798.79622*Unit('cal'/'mol'): ``

T__c := 190.564*Unit('K'):   ``

T__sys/T__c

.3383370941

``

 

CPIGDP-1

 

Aspen Plus | Methods | Parameters | Pure Components

 

CPIGDP__1 := 7.953090666*Unit('cal'/('mol'*'K')): ``

CPIGDP__2 := 19.09166906*Unit('cal'/('mol'*'K')):``

CPIGDP__3 := 2086.9*Unit('K'): ``

CPIGDP__4 := 9.936466991*Unit('cal'/('mol'*'K')): 

CPIGDP__5 := 991.96*Unit('K'): ````

CPIGDP__6 := 50*Unit('K'):  ``

CPIGDP__7 := 1500*Unit('K'): ``NULL

NULL

````NULL

Pure Component Ideal Gas Enthalpy Calculation [THRSWT/7]

 

NULL

Ideal Gas Heat Capacity Equation (DIPPR 107)

 

Aly and Lee 1981

``

C__p := proc (T) options operator, arrow; C__1a+C__2a*C__3a^2/(T^2*sinh(C__3a/T)^2)+C__4a*C__5a^2/(T^2*cosh(C__5a/T)^2) end proc:````

NULL

Required Pure Component Parameters

 

``

C__1a := CPIGDP__1:

C__2a := CPIGDP__2:

C__3a := CPIGDP__3:

C__4a := CPIGDP__4:  

C__5a := CPIGDP__5: 

C__6a := CPIGDP__6:

C__7a := CPIGDP__7:``

``

C__p(T__sys) = 7.953090666*Units:-Unit(('cal')/(('mol')*('K')))````

``NULL

Ideal Gas Enthalpy

 

NULL

T__ref := 298.15*Unit('K'):

NULL

HIG := proc (T__2) options operator, arrow; DHFORM+map(proc (e) options operator, arrow; int(e, T = T__ref .. T__2) end proc, C__p(T)) end proc:

HIG(T__sys)

-19682.67422*Units:-Unit(('cal')/('mol'))

NULL

NULLNULL


Download Int_Units_modif2.mw

 

I now see that there is such a crossing of eigenvalues roughly similar to what I described above.

It's easier to see in 2D with curves than with the 3D surfaces. So I substitute y=sqrt(3)*x into Matrix C, to reduce by one dimension. The plot of the 6 eigenvalues will now be 6 curves which represent the six spaces curves where the previous 6 surfaces intersect with the place y=sqrt(3)*x.

(I ran this in Maple 2015.1 because it's about three times faster than in Maple 12.02. But the worksheet loads in Maple 12.02 and if re-executed produces the same 2D plots.)

ex_modif3.mw

Here are the spacecurves where the 2nd, 3rd, 4th, and 5th surfaces intersect with y=sqrt(3)*x. Here is it in color.

And here it is in black, which I think shows the issue more clearly.

It is clear, I believe, that the blue curve is not tracking the "same" eigenvalue over all x values. Sure, the blue curve data and the green curve data together track two eigenvalues. But the coloring flips when it ought not.

This is all an artefact of the order of the eigenvalues, whether done by sorting the Eigenvectors or by the sorting that fsolve does.

And so the 3D surfaces have the same issue, I believe. Four of the colored surfaces may be "falsely" switching between eigenvalues, where the surfaces meet. If you display together just surrfaces 2 and 3 then at some rotation angles the switchovers are apparent.

In other words: the previously plotted surface 2 does not correspond to "one particular" eigenvalue (if you know what I mean...). But surfaces 2 and 3 (or 4 and 5) appear to represent a mashup of a pair of eigenvalues.

I somewhat doubt that this issue can be resolved easily using only implicit RootOfs to represent the 6 generic roots (eigenvalues). But I haven't experimented with even that.

@2cheakk The original question tried to plot from u=0 to u=10, so I took that as the goal. Often it helps to provide as much information as possible (to `simplify` or `int`, etc). It may not have made an impact.

@Prashanth Please take the time to describe your more "general" problem. It does not make sense to write about a "general solution" when you have not outlined the family of candidate problems.

Are all your problems going to be bivariate? Are they all going to involve (only) linear inequalities?

@Prashanth Reverse order in the list [x,y] of variables (as the 2nd argument passed to `solve`).

sol := solve([x-y = 10, x+y < 100], [y,x]):

convert(convert(op([1,1],sol),RealRange),relation);

                  And(-infinity <= y, y < 45)

which typesets like -infinity <= y <= 45 in the GUI.

Similarly,

solx := solve([x-y = 10, x+y < 100], [x,y]):
convert(convert(op([1,1],solx),RealRange),relation);

                  And(-infinity <= x, x < 55)

This kind of approach can get difficult, as the example becomes more complicated. This kind of thing has been asked before. It'd be nice if `solve` itself could do the heavy lifting.

It occured to me that obtaining the desired form (from what I got with a mapped int call) might possibly be accomplished with these replacement rules:

> rule1;

         2 (exp(2 a) - exp(2 b))        coth(b) coth(a) - 1
    - ----------------------------- = - -------------------
      (exp(2 b) - 1) (exp(2 a) - 1)        coth(-b + a)    

> rule2;

               coth(b) coth(a) - 1               
               ------------------- = coth(-b + a)
               -coth(a) + coth(b)                

I don't know how to obtain that rule1 except by some rather ad hoc business of adding/subtracting or multiplying/dividing key terms to numerator/denominator, with judicious partial simplification/expansion/etc.

The second one is easy to create programatically,

> convert(expand( coth(a-b) ),coth) = coth(a-b);

               coth(b) coth(a) - 1               
               ------------------- = coth(-b + a)
               -coth(a) + coth(b)                

I didn't actually try to use these, via applyrule, on the summands of the mapped int result for the given example.

@SRINIVASA RAGHAVA Your document appears to be essentially empty.

The only content in your attachment is an execution group whose input is the empty string. Ie,

Typesetting:-mrow(Typesetting:-mi(""), executable = "false", mathvariant = "normal")

 

@SRINIVASA RAGHAVA You haven't succeeded yet. When you use the Big Green Arrow you have to 1) select the file, 2) hit the "Upload" button, and then 3) scroll down in the popup and hit either the "Insert Link" or "Insert Contents" button.

Where is the attachment?

acer

@fzfbrd

Change your,

CrssOfVds := VDS -> ArrayInterpolation(Vds, Crss, V)

to,

CrssOfVds := VDS -> ArrayInterpolation(Vds, Crss, VDS)

And change,

Q := evalf(Int(CrssOfVds, Vdson .. Charge_Vds)

to,

Q := evalf(Int(CrssOfVds, Vdson .. Charge_Vds, epsilon = 0.1e-6))

That gets me a result of 2.96204101072752*10^(-9).

I found that at your default working precision of Digits=10 the epsilon tolerance for the evalf/Int call had to be at least about 1e-8. You can experiment with the working precision and that epsilon tolerance. (I don't know how accurate you want the result to be.)

Alternatively you could (and probably should) change that call to ArrayInterpolation to include the method=spline option. (See my Answer below.) That allows a result to attain even without using the epsilon option of evalf/Int, at default Digits=10.

Ie, on my 64bit Linux version of Maple 2015.0 I am seeing,

CrssOfVds := VDS -> ArrayInterpolation(Vds, Crss, VDS, method = spline):

Q := evalf(Int(CrssOfVds, Vdson .. Charge_Vds));

                 2.96479729742643*10^(-9)

Note that there is a distinction between obtaining a highly accurate numeric estimation of a crude (linear, say) interpolation, versus obtaining a numeric estimation of a higher degree (and likely more correct) interpolation. There's not much point in obtaining many digits of a crude linear interpolation. You'd be better off with a modest number of accurate digits of a higher degree (better fitting) interpolation. Hope that makes sense.

But of course if you are working with experimental data that is likely subject to noise then it may well be that only a few digits can even be meaningful. This might also be a good time to mention that if your data is experimental and subject to noise then you  might also consider the distinction between interpolating the data and smoothing (or fitting it) it. The interpolation schemes discussed here will pass directly through the data points. But it may be that experimental data merely approximates some physical process, in which case an interpolation which directly passes through the data points may not actually give the best approximation of the area under the abstract curve represented by the actual physical process. It may turn out that a smoothing of the data (of which a numeric "fit" is one example) might give a curve whose area better represents that of the actual physical process. In practice the difference may be indiscernable, up to the degree of noise present. Sorry if this is all obvious. You may well be (already) only expecting a few decimal digits to be trusted in any numerical estimate.

Here is my edited worksheet. (...you'll have to change back the definition of ThisDocumentPath, to run it.) 

Fet_Cap_modif.mw

I have seen a similar problem when I have a running worksheet that is minimized to the desktop tray (MS-Windows), and if I have the GUI set up to always ask whether to use a new or shared kernel for each new opened document.

In this situation, when I double-click the Maple launch icon the kernel-query-popup can be present and waiting but suprressed from view.

In this situation I can sometimes simply hit the Enter key and so clear the waiting query-popup.

acer

How did you obtain the Arrays of values, btw?

I ask because if you obtained them from calling dsolve(...,numeric) then we can often do better than ArrayInterpolation (or often any other quadrature approach, after the fact)  by using dsolve itself. That flavour of this question comes up quite a bit.

The choice of most efficient method will depend on how many elements there are in your Arrays, and how many times you need compute a numeric integral. For example, a spline interpolation approach (from CurveFitting, say) can gets somwhat slow as the Array length gets very large, partly beacause of the cost of forming the piecewise (once) and partly on account of the cost of evaluating the piecewise (each time).

acer

@Carl Love Please pardon me while I make a clarifying comment, just in the interest of being clear to the OP:

The first element of the solution returned by DirectSearch:-DataFit is the minimal achieved value of the objective function used for the particular fitting method. And different fitting methods may use a different objective formula as their respective measure.

So it is not generally sensible to compare results obtained from the various fitting methods simply by comparing the magnitude of the first element in each returned solution. The minimal values from different objectives, evaluated at their different optimal parameter points, are not directly comparable. So one cannot just pick the solution which gives the smallest first element.

It thus becomes up to the user to decide what measure of optimality (ie. what objective) may produce a "better" fit.

How does your supervisor feel about an interactive solution using Embedded Components?

acer

@Carl Love Yes, that kind of deferment (userinfo, etc) is part of the unfortunate way that Document Blocks are implemented (the pair of execution  groups, one with output suppressed and the other with input hidden...).

But the OP mentioned printf, and is I recall corectly that particular kind of i/o can usually be obtained asynchronously even in a Document Block. So that's one reason why I asked for more details.

[edit] I must correct myself. In a Document Block it seems that even printf display is deferred. dbdefer.mw

However, the OP has now clarified: this is about a Worksheet, so the above not relevant.

First 325 326 327 328 329 330 331 Last Page 327 of 593