MaplePrimes Posts

MaplePrimes Posts are for sharing your experiences, techniques and opinions about Maple, MapleSim and related products, as well as general interests in math and computing.

Latest Post
  • Latest Posts Feed
  • Several Maple T.A. users have developed comprehensive sets of question content and assignments to support full courses in Maple T.A. These questions are available through the Maple T.A. Cloud, and we have decided to also post the associated course modules on Maple Primes as an alternative way of accessing this content.

    Below you will find a link to the Introductory Calculus for Biological Sciences Maple T.A.. course module developed by the University of Guelph.

    This testing content is freely distributed, and can be used in your own Maple T.A. tests either as-is, or with edits.

    The Introductory Calculus for Biological Sciences course module is designed to cover a single-semester introductory calculus course for biological sciences students at the first-year university level. The questions are designed to span the topics listed below, allowing for practice, homework or testing throughout the semester.

    Topics include:

    • Introduction to Functions
    • Composite and Inverse Functions
    • Trigonometric Functions
    • Logarithms and Exponents
    • Sequences and Finite Series
    • Limits and Continuity
    • Derivatives
    • Curve Sketching
    • Differentials
    • Linear Approximation
    • Taylor Polynomials
    • Difference Equations
    • Log-Log Graphs
    • Anti-Differentiation
    • Definite Integrals

    Jonny Zivku
    Maplesoft Product Manager, Maple T.A.

    Erik Postma from Maplesoft has recently posted a Maple application going through some of the ways how to produce random numbers in Maple: http://www.maplesoft.com/applications/view.aspx?SID=153662&P=TC-4444

    Doing a fair bit of work involving random numbers (i.e. simulations) myself, I was naturally drawn to it. The document is a nice extension of the relevant help pages, making practical use of some of the procs in RandomTools easier and clearer.

    One particular issue I recently ran into, however, is not covered. I needed a random generator for a particular custom pdf (not one of the already recognized pdfs) that happens to be 3-dimensional. And I needed to do this >twice<, with the second generation using the result of the first one as a parameter. the problem is not unlike the last example in the help page for Statistics:-Sample.

    Here is what I did:

    The pdf looks graphically like this (and note that in this plot it is not normalized):

    plot3d(Triangle63:-Trianglef(CrystalAngle,DeflectionAngle),\
           CrystalAngle=-0.8..0.2,DeflectionAngle=-0.6..0.6,projection=0.7);

    The first set of random numbers is generated by setting CrystalAngle to a fixed number (-0.1 in this case), normalizing the pdf to the integral over DeflectionAngle and then generating the random numbers. Note that evaluation of the integral is relatively time-consuming (seconds).

    trianglepdf:=(CrystalAngle,DeflectionAngle) ->\
                 Triangle63:-Trianglef(CrystalAngle,DeflectionAngle)/\
                 'evalf(Int(Triangle63:-Trianglef(CrystalAngle,Da),Da=-0.6..0.6,method = _d01akc))':
    triangle0pdf:=(t) -> trianglepdf(-0.1,t):
    Cr1:=Distribution(PDF=triangle0pdf);
    Y:=RandomVariable(Cr1);

    samples:=Sample(Y,[1..600],method=[envelope,range=-0.6..0.6]);

    Histogram(samples,view=[-0.6..0.6,default],labels=["Deflection Angle  (µrad)","Counts/bin"]);

    This looks as it should; and the random number generation is reasonably fast once the initial setup has been done (i.e. the time used scales only relatively weakly with the count of random numbers generated.

    The issue now is the second stage, where for each new random number, the number generated above is a new input parameter for CrystalAngle. So I can no longer define the pdf once since the pdf is different for each number generated.

    The pedestrian way to do this is like the following:

    samples2:=Vector(1..numelems(samples),datatype=float):
    CrystalOffset:=0.3;

    for ii from 1 to numelems(samples) do
      triangleiipdf:=(t) -> (trianglepdf(samples[ii]-~CrystalOffset,t)); # subtract (VR peak -> 0)
      Crii:=Distribution(PDF=triangleiipdf);
      samples2[ii]:=evalf(Sample(RandomVariable(Crii),1,method=[envelope,range=-0.6..0.6])[1]+CrystalOffset);
    end do:

    This works, but only sort-of. First, it is very slow, since the whole sertup happens for each number generated (Sample()). Secondly, it tends to hang at a certain number of steps through the loop. The value of ii where it hangs is arbitrary and changes with the other parameters and CrystalOffset. It is however consistent for identical runs.

    The last example in help for Statistics:-Sample would indicate that one needs to setup the pdf as a function of t as well as the parameter, call Distribution() only once and then assign the value to the parameter and call Sample() to get the random number(s) drawn from the pdf with the parameter being set to the wanted value. While this works in the example which uses a built-in pdf, I find that I cannot make it work with my pdf. Either the parameter gets ignored (i.e. stuck at the first value) or the thing runs just as slowly as my procedure above.

    Ultimately I programmed my own random generator for an arbitrary pdf which, while not as efficient as Maple's built-in generator, does produce the expected set of random numbers for the 2nd path in a reasonable time. It is a simple-minded envelope-rejection method, that works fo reasonably well-behaved pdfs:

    Rarbit:=proc(pdf,xmin,xmax,pdfmax)
    local dx:=xmax-xmin;
    local x1,x2;
    x1:=RandomTools[MersenneTwister]:-GenerateFloat64()*dx+xmin; # pick location on x axis
    x2:=RandomTools[MersenneTwister]:-GenerateFloat64()*pdfmax; # y axis, probability of returning x1

    while (x2>evalf(pdf(x1))) do # if above pdf, reject
      x1:=RandomTools[MersenneTwister]:-GenerateFloat64()*dx+xmin; # new x-axis value
      x2:=RandomTools[MersenneTwister]:-GenerateFloat64()*pdfmax; # check value
    end do; # eventually we'll succeed and return one.

    x1;
    end proc;

    Using this routine I get my second and final set of randome:

    for ii from 1 to numelems(samples) do
      newpdf:=(DefAng) -> Triangle63:-Trianglef(samples[ii]-CrystalOffset,DefAng);
      samples2[ii]:=Random:-Rarbit(newpdf,-0.6,0.6,28);
      DocumentTools:-SetProperty(ProgressBar,'value',ii,refresh);
    end do:
                          CrystalOffset := 0.3
    Histogram(samples2+~samples,view=[-0.6..0.6,default]);

     I would be interested in Erik's comment on this.

    Mac Dude

     

    Several Maple T.A. users have developed comprehensive sets of question content and assignments to support full courses in Maple T.A. These questions are available through the Maple T.A. Cloud, and we have decided to also post the associated course modules on Maple Primes as an alternative way of accessing this content.

    Below you will find a link to the Introductory Mathematical Economics Maple T.A.. course module developed by the University of Guelph.

    This testing content is freely distributed, and can be used in your own Maple T.A. tests either as-is, or with edits.

    The Introductory Mathematical Economics course module is designed to cover a single-semester course in mathematical economics for economics and commerce students at the second-year university level. The questions are designed to span the topics listed below, allowing for practice, homework or testing throughout the semester.

    Topics include:

    • Rules of Differentiation
    • First Order Differential Equations
    • Higher Order Derivatives
    • Optimization in One Variable
    • Second Order Conditions for Optimization
    • Systems of Linear Equations
    • Optimization with Direct Restrictions on Variables
    • Over Determined and Under Determined Systems
    • Matrix Representation of Systems
    • Gauss Jordan
    • Matrix Operations
    • Types of Matrices
    • Determinants and Inverses
    • Partial Differentiation
    • Second Order Partial Derivatives
    • Multivariate Optimization
    • Second Order Conditions for Multivariate Optimization
    • Multivariate Optimization with Direct Restrictions of Variables
    • Constrained Optimization and the Lagrangean Method
    • Second Order Conditions for Constrained Optimization

    Jonny Zivku
    Maplesoft Product Manager, Maple T.A.

    Several Maple T.A. users have developed comprehensive sets of question content and assignments to support full courses in Maple T.A. These questions are available through the Maple T.A. Cloud, and we have decided to also post the associated course modules on Maple Primes as an alternative way of accessing this content.

    Below you will find a link to the Introductory Electricity & Magnetism Maple T.A.. course module developed by the University of Guelph.

    This testing content is freely distributed, and can be used in your own Maple T.A. tests either as-is, or with edits.

    The Introductory Electricity & Magnetism course module is designed to cover a single-semester course in electricity and magnetism for physical sciences students at the first-year university level. The questions are designed to span the topics listed below, allowing for practice, homework or testing throughout the semester. Using the Maple engine that is part of Maple TA, a custom grading engine has been developed to provide even more flexible grading of scalar and vector responses. This partial grading engine can be configured to, among other things, assign part marks for missing units, transposed or missing vector components or missing algebraic terms.


    Topics include:

    • Cross Products
    • Coulomb’s Law
    • Electric Fields
    • Point Charge Distributions
    • Continuous Charge Distributions (Integration)
    • Electric Potential
    • Electric Potential Energy
    • Electromotive Force
    • Resistance
    • Capacitance
    • Kirchhoff’s Laws
    • Magnetic Fields
    • Magnetic Fields Due to Current Carrying Wires
    • Forces on Wires in Magnetic Fields
    • Forces on Charges in Electric and/or Magnetic Fields
    • EM Waves
    • Two Source Interference
    • Double Slit Interference
    • Single Slit Diffraction
    • Diffraction Gratings

    Jonny Zivku
    Maplesoft Product Manager, Maple T.A.

    Did Maplesoft make a statistics about questions on MaplePrimes?

    There must be some commands frequently meet problems.

    I listed 10 commands or packages need to be enhanced much more.

    1.fsolve.

    eg, roots of transcendental equation on complex plane & system of nonlinear equations.

    2.int.

    Both numerical integration & symbolic integration need further developed.

    3.Eigenvalues&LinearSolve.

    large scale computing, everyone needs it.

    4.dsolve&pdsolve.

    dsolve needs to be enhanced for solve more equations in parallel.

    As mathematica 10 contains the FEM package, I think Maple needs to do something, develop a new package needs more time than make the existing pdsolve command better.

    5.Threads package.

    parallel programing is the future. BTW, why don't make the task model much easier to use, like the mathematica, just a command?

    6.plot&plot3d

    there is much space to go further about the two commands.

    7.Optimization package or Statistics package.

    In fact, both packages need to be further enhanced, especially for Optimization package.

    Although some modern algorithms about optimization&statistics is much easier to see on the internet, the

    Maplesoft should not stop, but go further, add them in Maple.

    Above is just my opinion.

    Thanks for your attention.

    Several Maple T.A. users have developed comprehensive sets of question content and assignments to support full courses in Maple T.A. These questions are available through the Maple T.A. Cloud, and we have decided to also post the associated course modules on Maple Primes as an alternative way of accessing this content.

    Below you will find a link to the Statistics Maple T.A.. course module developed by the University of Guelph.

    This testing content is freely distributed, and can be used in your own Maple T.A. tests either as-is, or with edits.

    The Statistics course module is designed to cover a single-semester course in statistics for science students at the second-year university level. The questions are designed to span the topics listed below, allowing for practice, homework or testing throughout the semester. The questions are mainly of an applied nature and do not delve very deeply into the underlying mathematical theory.

    Topics:

    • Introduction to Statistics
    • Descriptive Statistics
    • Basic Probability
    • Discrete Random Variables
    • Continuous Random Variables
    • Sampling Distributions
    • Inference for Means
    • Inference for Proportions
    • Inference for Variances
    • Chi-square Tests for Count Data
    • One-Way ANOVA
    • Simple Linear Regression and Correlation

    Jonny Zivku
    Maplesoft Product Manager, Maple T.A.

    Several Maple T.A. users have developed comprehensive sets of question content and assignments to support full courses in Maple T.A. These questions are available through the Maple T.A. Cloud, and we have decided to also post the associated course modules on Maple Primes as an alternative way of accessing this content.

    Below you will find a link to the Statistics Maple T.A.. course module developed by the University of Waterloo.

    This testing content is freely distributed, and can be used in your own Maple T.A. tests either as-is, or with edits.

    The Statistics content is used in introductory statistics courses at the University of Waterloo, and has been used regularly over several years. The over 700 questions are clearly organized by topic, and provide extensive feedback to students.


    Topics include:

    • Basics
    • Confidence Intervals
    • Continuous Distribution
    • Discrete Multivariate
    • Discrete Probability
    • Graphical Analysis
    • Hypothesis Testing
    • Numerical Analysis for Statistics
    • Probability
    • Sampling Distributions

    Jonny Zivku
    Maplesoft Product Manager, Maple T.A.

    Several Maple T.A. users have developed comprehensive sets of question content and assignments to support full courses in Maple T.A. These questions are available through the Maple T.A. Cloud, and we have decided to also post the associated course modules on Maple Primes as an alternative way of accessing this content.

    Below you will find a link to the Calculus 1 Maple T.A.. course module developed by the University of Guelph. This course material also forms part of Teaching Calculus with Maple: A Complete Kit, which provides lectures notes, Maple demonstrations, Maple T.A. assignments, and more for teaching both Calculus 1 and Calculus 2.

    This testing content is freely distributed, and can be used in your own Maple T.A. tests either as-is, or with edits.

    The Calculus 1 course module is designed to accompany the first semester of an introductory honours calculus course. The course is intended primarily for students who need or expect to pursue further studies in mathematics, physics, chemistry, engineering and computer science.

    Topics include:

    • trigonometry including the compound angle formulas
    • inequalities and absolute values
    • limits and continuity using rigorous definitions, the derivative and various applications (extreme, related rates, graph sketching)
    • Rolle's Theorem and the Mean Value Theorem for derivatives
    • the differential and anti-differentiation
    • the definite integral with application to area problems
    • the Fundamental Theorem of Calculus
    • logarithmic and exponential functions
    • the Mean Value Theorem for Integrals

    The Calculus 2 course module is designed to accompany the second semester of an introductory honours calculus course.

    Topics include:

    • inverse trigonometric functions
    • hyperbolic functions
    • L'Hôpital's Rule
    • techniques of integration
    • parametric equations
    • polar coordinates
    • Taylor and MacLaurin series
    • functions or two or more variables
    • partial derivatives
    • multiple integration

    Jonny Zivku
    Maplesoft Product Manager, Maple T.A.

    I would like to pay attention to a series of applications by Samir Khan
    http://www.maplesoft.com/applications/view.aspx?SID=153600
    http://www.maplesoft.com/applications/view.aspx?SID=153599
    http://www.maplesoft.com/applications/view.aspx?SID=153596
    http://www.maplesoft.com/applications/view.aspx?SID=153598
    My congratulations to the author on his work well done. New capacities of Global Optimization Toolbox are spectacular. For example, in the first application  an optimization
    problem in 101 variables under 5050 nonlinear  constraints
    (other than 202 bounds) is solved.
    I think it requires a very powerful comp and much time.
    I tried that  problem for n=20 with the good old DirectSearch
    on my comp (4 GB RAM, Pentium Dual-Core CPU E5700@3GHz) by

    soln2 := DirectSearch:-GlobalSearch(rc, {cons1, cons2, rc >= 0,
    seq(`and`(vars[i] >= -70, vars[i] <= 70), i = 1 .. 2*n), rc <= 70},
    variables = vars, method = quadratic, number = 140, solutions = 1,
    evaluationlimit = 20000)

    and obtained not so bad rc=69.9609360106765 (whereas www.packomania.com gives rc=58.4005674790451137175957) in about one hour.

    Packing_by_DS.mw
    For n=50 the memory of my comp cannot allocate calculations or the obtained result by the Search command is far away from the one in packomania.

     

    You guys might find this article interesting.

    It presents a linear algebra problem, then writes a program to solve it in Maple, Mathematica, and Maxima to see which one is better. What do you think?

    Maplesoft regularly hosts live webinars on a variety of topics. Below you will find details on an upcoming webinar we think may be of interest to the MaplePrimes community.  For the complete list of upcoming webinars, visit our website.

    Hollywood Math 2

    In this second installment of the Hollywood Math webinar series, we will present some more examples of mathematics being used in Hollywood films and popular hit TV series. For instance, have you wondered how Ben Campbell solved his professor’s challenge so easily in the movie “21”? Or about the details of the Nash equilibrium that John Nash first developed in a “A Beautiful Mind”? We’ve got the answers! These relevant, and exciting examples can be used as material to engage your students with examples familiar to them, or you can just attend the webinar for its entertainment value.

    Anyone with an interest in mathematics, especially high school and early college math educators, will be both entertained and informed by attending this webinar. At the end of the webinar you’ll be given an opportunity to download an application containing all of the examples that we demonstrate.

    To join us for the live presentation, please click here to register.

    If you missed the first webinar in this two part series, you can view the 'Hollywood Math' recording on our website.

    Here is an example of manipulating an Array of pixels. I chose the x-rite ColorChecker as a model so there would be published results to check my work. A number of details about color spaces have become clear through this exercise. The color adaptation process was modeled by converting betweenXYZ and LMS. Different black points may be selected depending on how close to zero illuminance one would accept as a good model. 

    I look forward to extending this work to verify and improve the color calibration of my photography. Also some experimentation with demosaicing should be possible.

    Initialization

     

    restart

    with(LinearAlgebra):

    unprotect(gamma):``

    NULL

    x-rite Colorchecker xyY Matrix

      CCxyY_D50 := Matrix(4, 6, {(1, 1) = Vector(3, {(1) = .4316, (2) = .3777, (3) = .1008}), (1, 2) = Vector(3, {(1) = .4197, (2) = .3744, (3) = .3495}), (1, 3) = Vector(3, {(1) = .2760, (2) = .3016, (3) = .1836}), (1, 4) = Vector(3, {(1) = .3703, (2) = .4499, (3) = .1325}), (1, 5) = Vector(3, {(1) = .2999, (2) = .2856, (3) = .2304}), (1, 6) = Vector(3, {(1) = .2848, (2) = .3911, (3) = .4178}), (2, 1) = Vector(3, {(1) = .5295, (2) = .4055, (3) = .3118}), (2, 2) = Vector(3, {(1) = .2305, (2) = .2106, (3) = .1126}), (2, 3) = Vector(3, {(1) = .5012, (2) = .3273, (3) = .1938}), (2, 4) = Vector(3, {(1) = .3319, (2) = .2482, (3) = 0.637e-1}), (2, 5) = Vector(3, {(1) = .3984, (2) = .5008, (3) = .4446}), (2, 6) = Vector(3, {(1) = .4957, (2) = .4427, (3) = .4357}), (3, 1) = Vector(3, {(1) = .2018, (2) = .1692, (3) = 0.575e-1}), (3, 2) = Vector(3, {(1) = .3253, (2) = .5032, (3) = .2318}), (3, 3) = Vector(3, {(1) = .5686, (2) = .3303, (3) = .1257}), (3, 4) = Vector(3, {(1) = .4697, (2) = .4734, (3) = .5981}), (3, 5) = Vector(3, {(1) = .4159, (2) = .2688, (3) = .2009}), (3, 6) = Vector(3, {(1) = .2131, (2) = .3023, (3) = .1930}), (4, 1) = Vector(3, {(1) = .3469, (2) = .3608, (3) = .9131}), (4, 2) = Vector(3, {(1) = .3440, (2) = .3584, (3) = .5894}), (4, 3) = Vector(3, {(1) = .3432, (2) = .3581, (3) = .3632}), (4, 4) = Vector(3, {(1) = .3446, (2) = .3579, (3) = .1915}), (4, 5) = Vector(3, {(1) = .3401, (2) = .3548, (3) = 0.883e-1}), (4, 6) = Vector(3, {(1) = .3406, (2) = .3537, (3) = 0.311e-1})})

    NULL

    NULL

    M := RowDimension(CCxyY_D50) = 4NULL

    N := ColumnDimension(CCxyY_D50) = 6

    NULL

    Convert xyY to XYZ

       

    NULL

    CCXYZ_D50 := C_xyY_to_XYZ(CCxyY_D50):

    CCXYZ_D50 = Matrix(4, 6, {(1, 1) = Vector(3, {(1) = .1152, (2) = .1008, (3) = 0.509e-1}), (1, 2) = Vector(3, {(1) = .3918, (2) = .3495, (3) = .1922}), (1, 3) = Vector(3, {(1) = .1680, (2) = .1836, (3) = .2571}), (1, 4) = Vector(3, {(1) = .1091, (2) = .1325, (3) = 0.529e-1}), (1, 5) = Vector(3, {(1) = .2419, (2) = .2304, (3) = .3344}), (1, 6) = Vector(3, {(1) = .3042, (2) = .4178, (3) = .3462}), (2, 1) = Vector(3, {(1) = .4071, (2) = .3118, (3) = 0.500e-1}), (2, 2) = Vector(3, {(1) = .1232, (2) = .1126, (3) = .2988}), (2, 3) = Vector(3, {(1) = .2968, (2) = .1938, (3) = .1015}), (2, 4) = Vector(3, {(1) = 0.852e-1, (2) = 0.637e-1, (3) = .1078}), (2, 5) = Vector(3, {(1) = .3537, (2) = .4446, (3) = 0.895e-1}), (2, 6) = Vector(3, {(1) = .4879, (2) = .4357, (3) = 0.606e-1}), (3, 1) = Vector(3, {(1) = 0.686e-1, (2) = 0.575e-1, (3) = .2138}), (3, 2) = Vector(3, {(1) = .1498, (2) = .2318, (3) = 0.790e-1}), (3, 3) = Vector(3, {(1) = .2164, (2) = .1257, (3) = 0.385e-1}), (3, 4) = Vector(3, {(1) = .5934, (2) = .5981, (3) = 0.719e-1}), (3, 5) = Vector(3, {(1) = .3108, (2) = .2009, (3) = .2356}), (3, 6) = Vector(3, {(1) = .1360, (2) = .1930, (3) = .3094}), (4, 1) = Vector(3, {(1) = .8779, (2) = .9131, (3) = .7397}), (4, 2) = Vector(3, {(1) = .5657, (2) = .5894, (3) = .4894}), (4, 3) = Vector(3, {(1) = .3481, (2) = .3632, (3) = .3029}), (4, 4) = Vector(3, {(1) = .1844, (2) = .1915, (3) = .1592}), (4, 5) = Vector(3, {(1) = 0.846e-1, (2) = 0.883e-1, (3) = 0.759e-1}), (4, 6) = Vector(3, {(1) = 0.299e-1, (2) = 0.311e-1, (3) = 0.269e-1})})NULL

    XYZ D50 to XYZ D65

       

    NULL

    CCXYZ_D65 := XYZ_D50_to_D65(CCXYZ_D50):

    CCXYZ_D65 = Matrix(4, 6, {(1, 1) = Vector(3, {(1) = .1110, (2) = 0.996e-1, (3) = 0.670e-1}), (1, 2) = Vector(3, {(1) = .3785, (2) = .3459, (3) = .2533}), (1, 3) = Vector(3, {(1) = .1726, (2) = .1861, (3) = .3403}), (1, 4) = Vector(3, {(1) = .1045, (2) = .1318, (3) = 0.690e-1}), (1, 5) = Vector(3, {(1) = .2470, (2) = .2329, (3) = .4430}), (1, 6) = Vector(3, {(1) = .3030, (2) = .4206, (3) = .4556}), (2, 1) = Vector(3, {(1) = .3850, (2) = .3044, (3) = 0.651e-1}), (2, 2) = Vector(3, {(1) = .1340, (2) = .1165, (3) = .3966}), (2, 3) = Vector(3, {(1) = .2855, (2) = .1895, (3) = .1347}), (2, 4) = Vector(3, {(1) = 0.867e-1, (2) = 0.642e-1, (3) = .1431}), (2, 5) = Vector(3, {(1) = .3334, (2) = .4409, (3) = .1142}), (2, 6) = Vector(3, {(1) = .4600, (2) = .4275, (3) = 0.777e-1}), (3, 1) = Vector(3, {(1) = 0.777e-1, (2) = 0.606e-1, (3) = .2839}), (3, 2) = Vector(3, {(1) = .1428, (2) = .2315, (3) = .1022}), (3, 3) = Vector(3, {(1) = .2063, (2) = .1216, (3) = 0.512e-1}), (3, 4) = Vector(3, {(1) = .5578, (2) = .5888, (3) = 0.906e-1}), (3, 5) = Vector(3, {(1) = .3073, (2) = .1990, (3) = .3131}), (3, 6) = Vector(3, {(1) = .1451, (2) = .1976, (3) = .4092}), (4, 1) = Vector(3, {(1) = .8646, (2) = .9129, (3) = .9759}), (4, 2) = Vector(3, {(1) = .5579, (2) = .5895, (3) = .6458}), (4, 3) = Vector(3, {(1) = .3434, (2) = .3633, (3) = .3997}), (4, 4) = Vector(3, {(1) = .1818, (2) = .1915, (3) = .2100}), (4, 5) = Vector(3, {(1) = 0.836e-1, (2) = 0.884e-1, (3) = .1002}), (4, 6) = Vector(3, {(1) = 0.296e-1, (2) = 0.311e-1, (3) = 0.355e-1})})

    NULL

    NULLConvert XYZ to Lab (D50 or D65 White Point)

     

    NULLNULL

    Reference White Point for D50

    NULL

    X_D50wht := XYZ_D50wht[1] = .96422NULL

    Y_D50wht := XYZ_D50wht[2] = 1NULL

    Z_D50wht := XYZ_D50wht[3] = .82521

    NULL

    Lab Conversion Constants;

    `&epsilon;` := 216/24389:

    kappa := 24389/27:

    NULL

    fx_D50 := proc (XYZ) options operator, arrow; piecewise(`&epsilon;` < XYZ[1]/X_D50wht, (XYZ[1]/X_D50wht)^(1/3), XYZ[1]/X_D50wht <= `&epsilon;`, (1/116)*kappa*XYZ[1]/X_D50wht+4/29) end proc
                    

    NULLNULL

    NULL

     
    fy_D50 := proc (XYZ) options operator, arrow; piecewise(`&epsilon;` < XYZ[2]/Y_D50wht, (XYZ[2]/Y_D50wht)^(1/3), XYZ[2]/Y_D50wht <= `&epsilon;`, (1/116)*kappa*XYZ[2]/Y_D50wht+4/29) end proc
    NULLNULL

    NULLNULL

    fz_D50 := proc (XYZ) options operator, arrow; piecewise(`&epsilon;` < XYZ[3]/Z_D50wht, (XYZ[3]/Z_D50wht)^(1/3), XYZ[3]/Z_D50wht <= `&epsilon;`, (1/116)*kappa*XYZ[3]/Z_D50wht+4/29) end proc
    NULL

    XYZ_to_Lab_D50 := proc (XYZ) options operator, arrow; `<,>`(116*fy_D50(XYZ)-16, 500*fx_D50(XYZ)-500*fy_D50(XYZ), 200*fy_D50(XYZ)-200*fz_D50(XYZ)) end proc:

    NULL

    Reference White Point for D65

    NULL

    X_D65wht := XYZ_D65wht[1] = .95047NULL

    Y_D65wht := XYZ_D65wht[2] = 1NULL

    Z_D65wht := XYZ_D65wht[3] = 1.08883 

    NULL

    NULL

    NULL

    NULL

    NULL

    NULL

    NULL

    fx_D65 := proc (XYZ) options operator, arrow; piecewise(`&epsilon;` < XYZ[1]/X_D65wht, (XYZ[1]/X_D65wht)^(1/3), XYZ[1]/X_D65wht <= `&epsilon;`, (1/116)*kappa*XYZ[1]/X_D65wht+4/29) end proc
                    

    NULLNULL

    NULL

     
    fy_D65 := proc (XYZ) options operator, arrow; piecewise(`&epsilon;` < XYZ[2]/Y_D65wht, (XYZ[2]/Y_D65wht)^(1/3), XYZ[2]/Y_D65wht <= `&epsilon;`, (1/116)*kappa*XYZ[2]/Y_D65wht+4/29) end proc
    NULLNULL

    NULLNULL

    fz_D65 := proc (XYZ) options operator, arrow; piecewise(`&epsilon;` < XYZ[3]/Z_D65wht, (XYZ[3]/Z_D65wht)^(1/3), XYZ[3]/Z_D65wht <= `&epsilon;`, (1/116)*kappa*XYZ[3]/Z_D65wht+4/29) end proc
    NULL

    XYZ_to_Lab_D65 := proc (XYZ) options operator, arrow; `<,>`(116*fy_D65(XYZ)-16, 500*fx_D65(XYZ)-500*fy_D65(XYZ), 200*fy_D65(XYZ)-200*fz_D65(XYZ)) end proc:

    NULL

    NULL

     

    NULL

    C_XYZ_to_Lab := proc (XYZ, L) options operator, arrow; piecewise(evalb(L = D50), Array([`$`('[`$`('XYZ_to_Lab_D50(XYZ[m, n])', n = 1 .. N)]', m = 1 .. M)]), evalb(L = D65), Array([`$`('[`$`('XYZ_to_Lab_D65(XYZ[m, n])', n = 1 .. N)]', m = 1 .. M)])) end proc
     NULL

    NULL

    NULLNULL

    NULL

    CCLab_D50 := C_XYZ_to_Lab(CCXYZ_D50, D50): NULL

    CCLab_D50 = Matrix(4, 6, {(1, 1) = Vector(3, {(1) = 37.99, (2) = 13.55, (3) = 14.06}), (1, 2) = Vector(3, {(1) = 65.71, (2) = 18.14, (3) = 17.82}), (1, 3) = Vector(3, {(1) = 49.93, (2) = -4.91, (3) = -21.92}), (1, 4) = Vector(3, {(1) = 43.14, (2) = -13.10, (3) = 21.89}), (1, 5) = Vector(3, {(1) = 55.11, (2) = 8.84, (3) = -25.39}), (1, 6) = Vector(3, {(1) = 70.72, (2) = -33.39, (3) = -.21}), (2, 1) = Vector(3, {(1) = 62.66, (2) = 36.06, (3) = 57.08}), (2, 2) = Vector(3, {(1) = 40.01, (2) = 10.42, (3) = -45.98}), (2, 3) = Vector(3, {(1) = 51.13, (2) = 48.24, (3) = 16.26}), (2, 4) = Vector(3, {(1) = 30.33, (2) = 23.00, (3) = -21.59}), (2, 5) = Vector(3, {(1) = 72.53, (2) = -23.70, (3) = 57.27}), (2, 6) = Vector(3, {(1) = 71.94, (2) = 19.37, (3) = 67.86}), (3, 1) = Vector(3, {(1) = 28.77, (2) = 14.17, (3) = -50.30}), (3, 2) = Vector(3, {(1) = 55.26, (2) = -38.32, (3) = 31.36}), (3, 3) = Vector(3, {(1) = 42.11, (2) = 53.38, (3) = 28.20}), (3, 4) = Vector(3, {(1) = 81.73, (2) = 4.03, (3) = 79.85}), (3, 5) = Vector(3, {(1) = 51.94, (2) = 50.00, (3) = -14.57}), (3, 6) = Vector(3, {(1) = 51.04, (2) = -28.65, (3) = -28.63}), (4, 1) = Vector(3, {(1) = 96.54, (2) = -.46, (3) = 1.19}), (4, 2) = Vector(3, {(1) = 81.26, (2) = -.64, (3) = -.35}), (4, 3) = Vector(3, {(1) = 66.76, (2) = -.72, (3) = -.51}), (4, 4) = Vector(3, {(1) = 50.86, (2) = -.14, (3) = -.28}), (4, 5) = Vector(3, {(1) = 35.65, (2) = -.44, (3) = -1.23}), (4, 6) = Vector(3, {(1) = 20.48, (2) = -0.7e-1, (3) = -.98})})NULL

    NULL

    Convert XYZ to aRGB (XYZ D50 or D65 to aRGB D65)

     

    XYZ Scaling for aRGB Ymax,Ymin (Ref. Adobe RGB (1998) Color Image Encoding Section 4.3.2.2 and 4.3.8)

    NULL

    White Point (Luminance=160Cd/m^2) D65

    Black Point (Luminance=0.5557Cd/m^2) D65

    White Point (Luminance=160Cd/m^2) D50

    Black Point (Luminance=0.5557Cd/m^2) D50

    XW_D65 := 152.07*(1/160) = .9504375000NULL

    YW_D65 := 160*(1/160) = 1``

    ZW_D65 := 174.25*(1/160) = 1.089062500``

    NULL

    xXK_D65 := .5282*(1/160) = 0.3301250000e-2``

    xYK_D65 := .5557*(1/160) = 0.3473125000e-2``

    xZK_D65 := .6025*(1/160) = 0.3765625000e-2``

    XK_D65 := 0:

    YK_D65 := 0:

    ZK_D65 := 0:

    ``

    ``

    XW_D50 := .9462:NULL

    YW_D50 := 1.0000:

    ZW_D50 := .8249:

    ``

    NULL

    xXK_D50 := 0.33488e-2:

    xYK_D50 := 0.34751e-2:

    xZK_D50 := 0.28650e-2:

    ``

    XK_D50 := 0:

    YK_D50 := 0:

    ZK_D50 := 0:

    NULL

     

    NULL

    XYZD65_to_aXYZ := proc (XYZ) options operator, arrow; `<,>`((XYZ[1]-XK_D65)*XW_D65/((XW_D65-XK_D65)*YW_D65), (XYZ[2]-YK_D65)/(YW_D65-YK_D65), (XYZ[3]-ZK_D65)*ZW_D65/((ZW_D65-ZK_D65)*YW_D65)) end proc:

    XYZD50_to_aXYZ := proc (XYZ) options operator, arrow; `<,>`((XYZ[1]-XK_D50)*XW_D50/((XW_D50-XK_D50)*YW_D50), (XYZ[2]-YK_D50)/(YW_D50-YK_D50), (XYZ[3]-ZK_D50)*ZW_D50/((ZW_D50-ZK_D50)*YW_D50)) end proc:

     

    NULL

    (ref. Adobe RGB(1998) section 4.3.6.1, Bradford Matrix includes D50 to D65 adaptation)

    M_XYZtoaRGB_D50 := Matrix(3, 3, {(1, 1) = 1.96253, (1, 2) = -.61068, (1, 3) = -.34137, (2, 1) = -.97876, (2, 2) = 1.91615, (2, 3) = 0.3342e-1, (3, 1) = 0.2869e-1, (3, 2) = -.14067, (3, 3) = 1.34926})

      aXYZ_to_RGB_D50 := proc (aXYZ) options operator, arrow; `<,>`(Typesetting:-delayDotProduct(M_XYZtoaRGB_D50, aXYZ)) end proc: NULL

     

    (ref. Adobe RBG(1998) section 4.3.4.1, Bradford Matrix assumes XYZ is D65)

    M_XYZtoaRGB_D65 := Matrix(3, 3, {(1, 1) = 2.04159, (1, 2) = -.56501, (1, 3) = -.34473, (2, 1) = -.96924, (2, 2) = 1.87597, (2, 3) = 0.4156e-1, (3, 1) = 0.1344e-1, (3, 2) = -.11836, (3, 3) = 1.01517})

      NULL

    aXYZ_to_RGB_D65 := proc (aXYZ) options operator, arrow; `<,>`(Typesetting:-delayDotProduct(M_XYZtoaRGB_D65, aXYZ)) end proc:

    NULL

      aRGB Expansion for 8bits

     

    `&gamma;a` := 2.19921875:

    RGB_to_aRGB := proc (RGB) options operator, arrow; `<,>`(round(255*Norm(RGB[1])^(1/`&gamma;a`)), round(255*Norm(RGB[2])^(1/`&gamma;a`)), round(255*Norm(RGB[3])^(1/`&gamma;a`))) end proc:
    NULL

     

    Combine Steps

    NULL

    XYZ_to_aRGB := proc (XYZ, L) options operator, arrow; piecewise(evalb(L = D50), Array([`$`('[`$`('RGB_to_aRGB(aXYZ_to_RGB_D50(XYZD50_to_aXYZ(XYZ[m, n])))', n = 1 .. N)]', m = 1 .. M)]), evalb(L = D65), Array([`$`('[`$`('RGB_to_aRGB(aXYZ_to_RGB_D65(XYZD65_to_aXYZ(XYZ[m, n])))', n = 1 .. N)]', m = 1 .. M)])) end proc

    NULLNULL

    NULLNULL

    Note: The aRGB values published for ColorChecker assume a black point of 0cd/m^2.

    ````

    aRGB_D50in := XYZ_to_aRGB(CCXYZ_D50, D50):

    aRGB_D50in = Matrix(4, 6, {(1, 1) = Vector(3, {(1) = 107, (2) = 82, (3) = 70}), (1, 2) = Vector(3, {(1) = 184, (2) = 146, (3) = 128}), (1, 3) = Vector(3, {(1) = 101, (2) = 122, (3) = 153}), (1, 4) = Vector(3, {(1) = 95, (2) = 107, (3) = 69}), (1, 5) = Vector(3, {(1) = 128, (2) = 127, (3) = 173}), (1, 6) = Vector(3, {(1) = 129, (2) = 188, (3) = 171}), (2, 1) = Vector(3, {(1) = 201, (2) = 123, (3) = 56}), (2, 2) = Vector(3, {(1) = 77, (2) = 92, (3) = 166}), (2, 3) = Vector(3, {(1) = 174, (2) = 83, (3) = 97}), (2, 4) = Vector(3, {(1) = 86, (2) = 61, (3) = 104}), (2, 5) = Vector(3, {(1) = 167, (2) = 188, (3) = 75}), (2, 6) = Vector(3, {(1) = 213, (2) = 160, (3) = 55}), (3, 1) = Vector(3, {(1) = 49, (2) = 65, (3) = 143}), (3, 2) = Vector(3, {(1) = 99, (2) = 148, (3) = 80}), (3, 3) = Vector(3, {(1) = 155, (2) = 52, (3) = 59}), (3, 4) = Vector(3, {(1) = 227, (2) = 197, (3) = 52}), (3, 5) = Vector(3, {(1) = 169, (2) = 85, (3) = 147}), (3, 6) = Vector(3, {(1) = 61, (2) = 135, (3) = 167}), (4, 1) = Vector(3, {(1) = 245, (2) = 245, (3) = 242}), (4, 2) = Vector(3, {(1) = 200, (2) = 201, (3) = 201}), (4, 3) = Vector(3, {(1) = 160, (2) = 161, (3) = 162}), (4, 4) = Vector(3, {(1) = 120, (2) = 120, (3) = 121}), (4, 5) = Vector(3, {(1) = 84, (2) = 85, (3) = 86}), (4, 6) = Vector(3, {(1) = 52, (2) = 53, (3) = 54})})NULL

      

    NULL

    aRGB_D65in := XYZ_to_aRGB(CCXYZ_D65, D65):

    aRGB_D65in = Matrix(4, 6, {(1, 1) = Vector(3, {(1) = 107, (2) = 82, (3) = 70}), (1, 2) = Vector(3, {(1) = 184, (2) = 146, (3) = 128}), (1, 3) = Vector(3, {(1) = 101, (2) = 122, (3) = 153}), (1, 4) = Vector(3, {(1) = 95, (2) = 107, (3) = 69}), (1, 5) = Vector(3, {(1) = 128, (2) = 127, (3) = 173}), (1, 6) = Vector(3, {(1) = 129, (2) = 188, (3) = 171}), (2, 1) = Vector(3, {(1) = 201, (2) = 123, (3) = 56}), (2, 2) = Vector(3, {(1) = 77, (2) = 92, (3) = 166}), (2, 3) = Vector(3, {(1) = 174, (2) = 83, (3) = 97}), (2, 4) = Vector(3, {(1) = 86, (2) = 61, (3) = 104}), (2, 5) = Vector(3, {(1) = 167, (2) = 188, (3) = 75}), (2, 6) = Vector(3, {(1) = 213, (2) = 160, (3) = 55}), (3, 1) = Vector(3, {(1) = 49, (2) = 65, (3) = 143}), (3, 2) = Vector(3, {(1) = 99, (2) = 148, (3) = 80}), (3, 3) = Vector(3, {(1) = 155, (2) = 52, (3) = 59}), (3, 4) = Vector(3, {(1) = 227, (2) = 197, (3) = 52}), (3, 5) = Vector(3, {(1) = 169, (2) = 85, (3) = 147}), (3, 6) = Vector(3, {(1) = 61, (2) = 135, (3) = 167}), (4, 1) = Vector(3, {(1) = 245, (2) = 245, (3) = 242}), (4, 2) = Vector(3, {(1) = 200, (2) = 201, (3) = 201}), (4, 3) = Vector(3, {(1) = 160, (2) = 161, (3) = 162}), (4, 4) = Vector(3, {(1) = 120, (2) = 120, (3) = 121}), (4, 5) = Vector(3, {(1) = 84, (2) = 85, (3) = 86}), (4, 6) = Vector(3, {(1) = 52, (2) = 53, (3) = 54})})

    Convert XYZ to ProPhoto RGB (D50)

       

    NULL

    CC_PPhoto := XYZ_to_PPhoto(CCXYZ_D50):

    NULL

    CC_PPhoto = Matrix(4, 6, {(1, 1) = Vector(3, {(1) = 81, (2) = 67, (3) = 54}), (1, 2) = Vector(3, {(1) = 159, (2) = 135, (3) = 113}), (1, 3) = Vector(3, {(1) = 94, (2) = 102, (3) = 133}), (1, 4) = Vector(3, {(1) = 75, (2) = 86, (3) = 55}), (1, 5) = Vector(3, {(1) = 118, (2) = 111, (3) = 154}), (1, 6) = Vector(3, {(1) = 127, (2) = 168, (3) = 157}), (2, 1) = Vector(3, {(1) = 167, (2) = 118, (3) = 54}), (2, 2) = Vector(3, {(1) = 79, (2) = 74, (3) = 145}), (2, 3) = Vector(3, {(1) = 141, (2) = 83, (3) = 80}), (2, 4) = Vector(3, {(1) = 68, (2) = 49, (3) = 82}), (2, 5) = Vector(3, {(1) = 144, (2) = 170, (3) = 74}), (2, 6) = Vector(3, {(1) = 181, (2) = 152, (3) = 60}), (3, 1) = Vector(3, {(1) = 57, (2) = 50, (3) = 120}), (3, 2) = Vector(3, {(1) = 85, (2) = 123, (3) = 69}), (3, 3) = Vector(3, {(1) = 120, (2) = 59, (3) = 46}), (3, 4) = Vector(3, {(1) = 199, (2) = 188, (3) = 66}), (3, 5) = Vector(3, {(1) = 143, (2) = 85, (3) = 127}), (3, 6) = Vector(3, {(1) = 78, (2) = 111, (3) = 148}), (4, 1) = Vector(3, {(1) = 242, (2) = 243, (3) = 240}), (4, 2) = Vector(3, {(1) = 189, (2) = 190, (3) = 191}), (4, 3) = Vector(3, {(1) = 145, (2) = 146, (3) = 146}), (4, 4) = Vector(3, {(1) = 102, (2) = 102, (3) = 102}), (4, 5) = Vector(3, {(1) = 66, (2) = 66, (3) = 68}), (4, 6) = Vector(3, {(1) = 37, (2) = 37, (3) = 38})})NULL

    Convert XYZ to sRGB (XYZ D50 or D65 to sRGB D65)

       

    NULL

    Note: The sRGB values published for ColorChecker assume a black point of 0cd/m^2.

    ``

    CCsRGB_D65in := XYZ_to_sRGB(CCXYZ_D65, D65):

    NULL

    CCsRGB_D65in = Matrix(4, 6, {(1, 1) = Vector(3, {(1) = 115, (2) = 81, (3) = 67}), (1, 2) = Vector(3, {(1) = 199, (2) = 147, (3) = 129}), (1, 3) = Vector(3, {(1) = 91, (2) = 122, (3) = 156}), (1, 4) = Vector(3, {(1) = 90, (2) = 108, (3) = 64}), (1, 5) = Vector(3, {(1) = 130, (2) = 128, (3) = 176}), (1, 6) = Vector(3, {(1) = 92, (2) = 190, (3) = 172}), (2, 1) = Vector(3, {(1) = 224, (2) = 124, (3) = 47}), (2, 2) = Vector(3, {(1) = 68, (2) = 91, (3) = 170}), (2, 3) = Vector(3, {(1) = 198, (2) = 82, (3) = 97}), (2, 4) = Vector(3, {(1) = 94, (2) = 58, (3) = 106}), (2, 5) = Vector(3, {(1) = 159, (2) = 189, (3) = 63}), (2, 6) = Vector(3, {(1) = 230, (2) = 162, (3) = 39}), (3, 1) = Vector(3, {(1) = 35, (2) = 63, (3) = 147}), (3, 2) = Vector(3, {(1) = 67, (2) = 149, (3) = 74}), (3, 3) = Vector(3, {(1) = 180, (2) = 49, (3) = 57}), (3, 4) = Vector(3, {(1) = 238, (2) = 198, (3) = 20}), (3, 5) = Vector(3, {(1) = 193, (2) = 84, (3) = 151}), (3, 6) = Vector(3, {(1) = 54, (2) = 136, (3) = 170}), (4, 1) = Vector(3, {(1) = 245, (2) = 245, (3) = 243}), (4, 2) = Vector(3, {(1) = 200, (2) = 202, (3) = 202}), (4, 3) = Vector(3, {(1) = 161, (2) = 163, (3) = 163}), (4, 4) = Vector(3, {(1) = 121, (2) = 121, (3) = 122}), (4, 5) = Vector(3, {(1) = 82, (2) = 84, (3) = 86}), (4, 6) = Vector(3, {(1) = 49, (2) = 49, (3) = 51})})NULL

    ``

    CCsRGB_D50in := XYZ_to_sRGB(CCXYZ_D50, D50):

    ``

    CCsRGB_D50in = Matrix(4, 6, {(1, 1) = Vector(3, {(1) = 115, (2) = 81, (3) = 67}), (1, 2) = Vector(3, {(1) = 199, (2) = 148, (3) = 129}), (1, 3) = Vector(3, {(1) = 91, (2) = 123, (3) = 156}), (1, 4) = Vector(3, {(1) = 90, (2) = 108, (3) = 64}), (1, 5) = Vector(3, {(1) = 130, (2) = 129, (3) = 176}), (1, 6) = Vector(3, {(1) = 92, (2) = 190, (3) = 172}), (2, 1) = Vector(3, {(1) = 224, (2) = 125, (3) = 47}), (2, 2) = Vector(3, {(1) = 68, (2) = 92, (3) = 170}), (2, 3) = Vector(3, {(1) = 198, (2) = 83, (3) = 97}), (2, 4) = Vector(3, {(1) = 94, (2) = 59, (3) = 106}), (2, 5) = Vector(3, {(1) = 159, (2) = 190, (3) = 63}), (2, 6) = Vector(3, {(1) = 230, (2) = 163, (3) = 39}), (3, 1) = Vector(3, {(1) = 35, (2) = 64, (3) = 147}), (3, 2) = Vector(3, {(1) = 67, (2) = 149, (3) = 74}), (3, 3) = Vector(3, {(1) = 180, (2) = 51, (3) = 57}), (3, 4) = Vector(3, {(1) = 238, (2) = 199, (3) = 20}), (3, 5) = Vector(3, {(1) = 193, (2) = 85, (3) = 151}), (3, 6) = Vector(3, {(1) = 54, (2) = 137, (3) = 170}), (4, 1) = Vector(3, {(1) = 245, (2) = 246, (3) = 243}), (4, 2) = Vector(3, {(1) = 200, (2) = 203, (3) = 202}), (4, 3) = Vector(3, {(1) = 161, (2) = 164, (3) = 163}), (4, 4) = Vector(3, {(1) = 121, (2) = 122, (3) = 122}), (4, 5) = Vector(3, {(1) = 82, (2) = 84, (3) = 86}), (4, 6) = Vector(3, {(1) = 49, (2) = 50, (3) = 51})})``

    NULL

    ``

    NULL

    NULL

    ``

     

     

     

     

     

     

     

     

    ``

     

    Corrections to the original version of theis document;
    • Make the scaling for a nonzero black point the same for all RGB color spaces.
    • Clip negative RGB values to zero.
    • Remove the redundant Array container from matrix multiplications.
    Use map in place of the $ to apply a function to each element of an Array.

    Pixel_Conversion_B.mw

     

    The Interactive Embedded Components in Physics are of great importance today and will be even more in the future. Hereand leave a small tutorial of Embedded Components in Physics applied to physics. I hope that somehow you motives to continue the development of science.

     

      Interactive_Embedded_Components_in_Physics.mw      (in spanish)                 

     Ponencia_CRF.pdf

    Atte.

    Lenin Araujo Castillo

    Physics Pure

    Computer Science

     

    To calculate the day of the week for a given date, first of all we need to find out the number of odd days.

    Today I thought of sharing a beautiful problem I learned in my school, though it is easy, it is tricky too.
    Odd Days are number of days more than the complete number of weeks in given period.
    Leap Year is the year which is divisible by 4.
    A normal year has 365 days
    A leap year has 366 days
    One normal year = 365 days = 52weeks + 1day
    One normal year has one odd day

    One leap year = 366 days = 52weeks + 2days
    One leap year has two odd days

    100 years = 76 ordinary years + 24 leap years = 5200 weeks + 124 days = 5217 weeks + 5 days
    100 years have 5 odd days

    400 years have (20+1) 0 odd days

    The number of odd days and the corresponding day of the week is given below

    0-Sunday
    1-Monday
    2-Tuesday
    3-Wednesday
    4-Thursday
    5-Friday
    6-Saturday

    So by finding out the number of odd days you can find out the day of the week. I hope this procedure Will be helpful in solving math problems in exams.

    Thanks.

    The search operation on both questions and posts doesn't work. I get the same set of results for both, and the same results regardless of the search term.

    When I login and then create a question or post and click submit (or preview), I get a new request to login, and, after I do that login, the originally entered message body has been erased.

    First 77 78 79 80 81 82 83 Last Page 79 of 300